[vb.net] Arraylist - eine kurze Einführung

Gepostet am: May 10, 2011 2:20:37 PM

Offensichtlich haben sich die Vorteile einer Arraylist gegenüber einem normalen Array noch immer nicht überall herumgesprochen. Daher wird noch immer munter mit Arrays gearbeitet, was nicht immer sinnvoll ist.

Grundlagen

Beispiel

Beispiel

Public Class Form1     Private Sub Button1_Click(ByVal sender As System.Object,      ByVal e As System.EventArgs) Handles Button1.Click         Dim i As Integer         Dim ItemList As New ArrayList()         ItemList.Add("Item4")         ItemList.Add("Item5")         ItemList.Add("Item2")         ItemList.Add("Item1")         ItemList.Add("Item3")         MsgBox("Shows Added Items")         For i = 0 To ItemList.Count - 1             MsgBox(ItemList.Item(i))         Next         'insert an item         ItemList.Insert(3, "Item6")         'sort itemms in an arraylist         ItemList.Sort()         'remove an item         ItemList.Remove("Item1")         'remove item from a specified index         ItemList.RemoveAt(3)         MsgBox("Shows final Items the ArrayList")         For i = 0 To ItemList.Count - 1             MsgBox(ItemList.Item(i))         Next     End SubEnd Class

Warum eine Arraylist anstelle eines Arrays?

Grundsätzlich ähnelt die ArrayList einem Array in der Beziehung, dass eine beliebige Anzahl von Objekten aufgenommen werden kann. Anders als bei einem Array werden dabei jedoch die Objekte nicht über ihren Index eingefügt, sondern über die Add.Methode. Somit entfällt das Redimensionieren des Arrays. Dies ist insbesondere vor dem Hintergrund, dass ein Redim Preserve gerade bei großen Arrays recht lange dauert, von großer Bedeutung.

Bei 100 Elementen spielt dies noch keine relevante Rolle, bei 1000 Elementen liegt der Duchschnitt bei 1000 Durchläufen beim Array bei 2,3 ms bei der Arraylist hingegen bei knapp über 1ms:

Bei 10.000 Elementen wird der Unterschied wesentlich größer. 103ms für den Array vs. 11,5 ms für die Arraylist.

Bei 100.000 Elementen vergeht einem das Spaß an den Arrays, mit Zeiten von mehr als 40.000 ms.

Und was ist mit List(of T)

List(of T) steht der Arraylist in Punkto Performance um nichts nach. Die beiden stellen grundsätzlich die selben Funktionen zur Verfügung (.Add, Remove, RemoveAT, Insert ....) Sie unterscheiden sich grundsätzlich nur dadurch, dass List(of T) von vornherein den Typ festlegt, der in ihr gespeichert wird. List(of String), List(of Double) usw.

Arraylists in VBA?

Wenn nun Arraylists um soviel schneller sind als Arrays, dann stellt sich die Frage, wie man sich in VBA verhalten sollte. Kann man denn auch in VBA Arraylists verwenden? Die Antwort ist ja, sofern man den entsprechenden Verweis setzt. Eine Alternative stellt die VBA.Collection dar. 

VBA.Collection

Public Function Test()     Set myCollection = New VBA.Collection     For i = 1 To 100         myCollection.Add ("Test " & i)     Next     Test = myCollection(1)End Function

Arraylist

Public Function Test2()Set objArrLst = CreateObject("System.collections.arraylist")For i = 1 To 100     objArrLst.Add ("Test " & i)Next Test2 = objArrLst(1)End Function

Links