|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
22.6.1. System.Collections.ArrayListDe voorgedefinieerde klasse System.Collections.ArrayList implementeert de IList interface : Visual Basic 2010 Broncode Option Strict OnImports System.Collections Public Class Person Private _Name As String Public Property Name() As String Get Name = _Name End Get Set( ByVal value As String) _Name = value End Set End Property Public Overrides Function ToString() As String ToString = Name End Function Public Overrides Function Equals( ByVal obj As Object) As Boolean If obj IsNot Nothing AndAlso TypeOf obj Is Person Then Equals = ( Me.Name.Equals( DirectCast(obj, Person).Name)) End If End Function Public Overrides Function GetHashCode() As Integer GetHashCode = Name.GetHashCode() End FunctionEnd ClassPublic Class ArrayListExample1 Public Shared Sub Main() Dim person1 As New Person With {.Name = "John"} Dim person2 As New Person With {.Name = "Jane"} Dim person3 As New Person With {.Name = "Paul"} Dim arrayList1 As New ArrayList arrayList1.Add(person1) arrayList1.Add(person2) Console.WriteLine( _ arrayList1.IndexOf( New Person With {.Name = "Jane"})) arrayList1.Insert(1, person3) Console.WriteLine(arrayList1.Item(1).ToString()) Console.WriteLine( _ arrayList1.Contains( New Person With {.Name = "Paul"})) arrayList1.RemoveAt(1) Console.WriteLine(arrayList1.Item(1).ToString()) Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output 1
Paul
True
Jane Het is vermeldenswaardig dat members als IndexOf, Contains en Remove gebruik maken van de Equals implementatie van de elementen uit de collectie. Deze members gaan op zoek naar elementen in de collectie en gebruiken dus logische gelijkheid om na te gaan of een element van de collectie gelijk is aan de parameter. Had men fysieke gelijkheid hiervoor gebruikt, of indien de item klasse Person de van Object overgeërfde Equals niet had geherdefinieerd, dan hadden bovenstaande calls naar IndexOf (1) en Contains (2) respectievelijk -1 en False opgeleverd. Voor meer details over logische en fysieke gelijkheid kan je terecht in de desbetreffende topics.
ArrayList voegt nog een aantal intressante members toe aan diegene die worden overgeërfd van IList, bijvoorbeeld : Public Overridable Sub AddRange(ByVal c As ICollection) Om meteen meerdere elementen aan de collectie toe te voegen. Deze toe te voegen elementen moeten zich reeds in ICollection vorm verzamelen. Public Overridable Sub Sort() Om de elementen van de ArrayList te sorteren. Public Overridable Sub Reverse() Om de volgorde van de elementen om te keren. Visual Basic 2010 Broncode Partial Class Person : Implements IComparable Public Function CompareTo( ByVal obj As Object) As Integer _ Implements IComparable. CompareTo If obj Is Nothing Then CompareTo = 1 ElseIf Not TypeOf obj Is Person Then Throw New ArgumentException( "An invalid argument was " & _ "specified. An argument of type Person is required.") Else CompareTo = Me.Name.CompareTo( DirectCast(obj, Person).Name) End If End FunctionEnd ClassPublic Class ArrayListExample2 Public Shared Sub Main() Dim persons1 As Person() = _ New Person() { New Person With {.Name = "Paul"}, _ New Person With {.Name = "John"}} Dim persons2 As Person() = _ New Person() { New Person With {.Name = "Jane"}, _ New Person With {.Name = "Rita"}} Dim arrayList1 As New ArrayList(persons1) arrayList1.AddRange(persons2) Print(arrayList1) arrayList1.Sort() Print(arrayList1) arrayList1.Reverse() Print(arrayList1) Console.ReadLine() End Sub Public Shared Sub Print( ByVal collection As IEnumerable) For Each element As Object In collection Console.Write(element.ToString() & " ") Next Console.WriteLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output Paul John Jane Rita
Jane John Paul Rita
Rita Paul John Jane Bemerk dat de ArrayList.Sort method van de CompareTo implementatie van de elementen gebruik maakt om deze te sorteren. Er bestaat een overladen versie van Sort waaraan je een System.Collections.IComparer argument kan doorgeven.
Lees het topic over de IComparer interface voor meer details. boven
22.6.2. System.Array Implementeert IListOok het type System.Array implementeert naast ondermeer de IEnumerable en ICollection interfaces ook de IList interface. De meeste van de members uit IList zijn echt Private geïmplementeerd en dus niet beschikbaar in de publieke interface.
Zelfs indien die wel beschikbaar zouden zijn moet je nog rekening houden met het feit dat een array een fixed size list is : Visual Basic 2010 Broncode Public Class ArrayExample Public Shared Sub Main() Dim array1 As Integer() = New Integer() {1, 2, 3} Dim list1 As IList = array1 Console.WriteLine(list1.IsFixedSize) Try list1.Add(4) Catch ex As NotSupportedException Console.WriteLine(ex.Message) End Try Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output True
Collection was of a fixed size.
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|