Csharp/C Sharp/Collections Data Structure/ArrayList
Содержание
- 1 Add array to ArrayList
- 2 Add items to ArrayList and use foreach loop to check
- 3 ArrayList Demo: hold class
- 4 Binary Search an ArrayList
- 5 Check InvalidCastException when using foreach loop with ArrayList
- 6 Checks time needed for list operations using an ArrayList implementation
- 7 Clone an ArrayList
- 8 Convert an ArrayList into an array
- 9 CopyTo, ToArray(), ToArray(typeof(String))
- 10 Demonstrate ArrayList
- 11 illustrates the use of an ArrayList that contains objects of the Car class
- 12 illustrates the use of ArrayList properties and methods
- 13 illustrates the use of ArrayLists 2
- 14 Inserting into an ArrayList by index
- 15 Remove range from ArrayList
- 16 Sort and search an ArrayList
- 17 Using foreach to loop through ArrayList and use Indexer of ArrayList
Add array to ArrayList
<source lang="csharp">
using System; using System.Collections; using System.Collections.Generic; using System.Text; class Program {
static void Main(string[] args) { ArrayList baseballTeams = new ArrayList(); baseballTeams.Add("S"); baseballTeams.Add("r"); baseballTeams.Add("F"); string[] myStringArray = new string[2]; myStringArray[0] = "G"; myStringArray[1] = "L"; baseballTeams.AddRange(myStringArray); foreach (string item in baseballTeams) { Console.Write(item + "\n"); } }
}
</source>
Add items to ArrayList and use foreach loop to check
<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Text; class Program {
static void Main(string[] args) { ArrayList baseballTeams = new ArrayList(); baseballTeams.Add("s"); baseballTeams.Add("r"); baseballTeams.Add("F"); foreach (string item in baseballTeams) { Console.Write(item + "\n"); } }
}
</source>
ArrayList Demo: hold class
<source lang="csharp"> /* Learning C# by Jesse Liberty Publisher: O"Reilly ISBN: 0596003765
- /
using System; using System.Collections; namespace ArrayListDemo { // a class to hold in the array list class Employee { private int empID; public Employee(int empID) { this.empID = empID; } public override string ToString() { return empID.ToString(); } public int EmpID { get { return empID; } set { empID = value; } } } public class ArrayListDemoTester { public void Run() { ArrayList empArray = new ArrayList(); ArrayList intArray = new ArrayList(); // populate the arraylists for (int i = 0;i<5;i++) { empArray.Add(new Employee(i+100)); intArray.Add(i*5); } // print each member of the array foreach (int i in intArray) { Console.Write("{0} ", i.ToString()); } Console.WriteLine("\n"); // print each employee foreach(Employee e in empArray) { Console.Write("{0} ", e.ToString()); } Console.WriteLine("\n"); Console.WriteLine("empArray.Capacity: {0}", empArray.Capacity); } [STAThread] static void Main() { ArrayListDemoTester t = new ArrayListDemoTester(); t.Run(); } } } </source>
Binary Search an ArrayList
<source lang="csharp"> using System; using System.Collections; class Album : IComparable, ICloneable {
private string _Title; private string _Artist; public Album(string artist, string title) { _Artist = artist; _Title = title; } public string Title { get { return _Title; } set { _Title = value; } } public string Artist { get { return _Artist; } set { _Artist = value; } } public override string ToString() { return _Artist + ",\t" + _Title; } public int CompareTo(object o) { Album other = o as Album; if (other == null) throw new ArgumentException(); if (_Artist != other._Artist) return _Artist.rupareTo(other._Artist); else return _Title.rupareTo(other._Title); } public object Clone() { return new Album(_Artist, _Title); }
} class TitleComparer : IComparer {
public int Compare(object l, object r) { Album left = l as Album; Album right = r as Album; if ((left == null) || (right == null)) throw new ArgumentException(); if (left.Title != right.Title) return left.Title.rupareTo(right.Title); else return left.Artist.rupareTo(right.Artist); }
} class Class1 {
static void Main(string[] args) { ArrayList arr = new ArrayList(); arr.Add(new Album("G", "A")); arr.Add(new Album("B", "G")); arr.Add(new Album("S", "A")); arr.Sort(); try { foreach (Album a in arr) { Console.WriteLine(a); } } catch (System.InvalidCastException e) { } arr.Sort(new TitleComparer()); foreach (Album a in arr) { Console.WriteLine(a); } Album l = new Album("L", "G"); arr.Sort(); int index = arr.BinarySearch(l); Console.WriteLine(index.ToString()); arr.Sort(new TitleComparer()); index = arr.BinarySearch(l, new TitleComparer()); Console.WriteLine(index.ToString()); }
}
</source>
Check InvalidCastException when using foreach loop with ArrayList
<source lang="csharp"> using System; using System.Collections; class Album : IComparable, ICloneable {
private string _Title; private string _Artist; public Album(string artist, string title) { _Artist = artist; _Title = title; } public string Title { get { return _Title; } set { _Title = value; } } public string Artist { get { return _Artist; } set { _Artist = value; } } public override string ToString() { return _Artist + ",\t" + _Title; } public int CompareTo(object o) { Album other = o as Album; if (other == null) throw new ArgumentException(); if (_Artist != other._Artist) return _Artist.rupareTo(other._Artist); else return _Title.rupareTo(other._Title); } public object Clone() { return new Album(_Artist, _Title); }
} public class foo {
public foo() { myString = "Test"; } private string myString;
} class MainClass {
static void Main(string[] args) { ArrayList arr = new ArrayList(); arr.Add(new Album("G", "A")); arr.Add(new Album("B", "G")); arr.Add(new Album("S", "A")); arr.Sort(); arr.Insert(0, new foo()); try { foreach (Album a in arr) { Console.WriteLine(a); } } catch (System.InvalidCastException e) { } }
}
</source>
Checks time needed for list operations using an ArrayList implementation
<source lang="csharp"> using System; using System.Drawing; using System.Collections; public class ArrayListTiming {
public static void Main() { ArrayList arrayImp = new ArrayList(); Point p = new Point(34, 156); int time1, time2; Object o; time1 = Environment.TickCount; for(int i = 0; i < 100000; i++) arrayImp.Add(p); time2 = Environment.TickCount; Console.WriteLine("Time for 100,000 adds: " + (time2 - time1)); time1 = Environment.TickCount; for(int i = 0; i < 1000; i++) arrayImp.Insert(50, p); time2 = Environment.TickCount; Console.WriteLine("Time for 1,000 adds at position 50: " + (time2 - time1)); time1 = Environment.TickCount; for(int i = 0; i < 10000000; i++) o = arrayImp[50]; time2 = Environment.TickCount; Console.WriteLine ("Time for 10,000,000 gets at position 50: " + (time2 - time1)); }
}
</source>
Clone an ArrayList
<source lang="csharp">
using System; using System.Collections; public class Starter {
public static void Main(string[] argv) { ArrayList al1 = new ArrayList(); foreach (string arg in argv) { al1.Add(int.Parse(arg)); } al1.Sort(); ArrayList al2 = (ArrayList)al1.Clone(); for (int count = 0; count < al2.Count; ++count) { al2[count] = ((int)al2[count]) * 2; } foreach (int number in al2) { Console.WriteLine(number); } }
}
</source>
Convert an ArrayList into an array
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Convert an ArrayList into an array.
using System; using System.Collections;
public class ArrayListToArray {
public static void Main() { ArrayList al = new ArrayList(); // Add elements to the array list. al.Add(1); al.Add(2); al.Add(3); al.Add(4); Console.Write("Contents: "); foreach(int i in al) Console.Write(i + " "); Console.WriteLine(); // Get the array. int[] ia = (int[]) al.ToArray(typeof(int)); int sum = 0; // sum the array for(int i=0; i<ia.Length; i++) sum += ia[i]; Console.WriteLine("Sum is: " + sum); }
}
</source>
CopyTo, ToArray(), ToArray(typeof(String))
<source lang="csharp">
using System; using System.Collections;
class MainClass { public static void Main() { ArrayList list = new ArrayList(5); list.Add("B"); list.Add("G"); list.Add("J"); list.Add("S"); list.Add("M"); string[] array1 = new string[list.Count]; list.CopyTo(array1, 0);
object[] array2 = list.ToArray(); string[] array3 = (string[])list.ToArray(typeof(String)); foreach (string s in array1) { Console.WriteLine(s); } foreach (string s in array2) { Console.WriteLine(s); } foreach (string s in array3) { Console.WriteLine(s); } } } </source>
Demonstrate ArrayList
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Demonstrate ArrayList.
using System; using System.Collections;
public class ArrayListDemo {
public static void Main() { // create an array list ArrayList al = new ArrayList(); Console.WriteLine("Initial capacity: " + al.Capacity); Console.WriteLine("Initial number of elements: " + al.Count); Console.WriteLine(); Console.WriteLine("Adding 6 elements"); // Add elements to the array list al.Add("C"); al.Add("A"); al.Add("E"); al.Add("B"); al.Add("D"); al.Add("F"); Console.WriteLine("Current capacity: " + al.Capacity); Console.WriteLine("Number of elements: " + al.Count); // Display the array list using array indexing. Console.Write("Current contents: "); for(int i=0; i < al.Count; i++) Console.Write(al[i] + " "); Console.WriteLine("\n"); Console.WriteLine("Removing 2 elements"); // Remove elements from the array list. al.Remove("F"); al.Remove("A"); Console.WriteLine("Current capacity: " + al.Capacity); Console.WriteLine("Number of elements: " + al.Count); // Use foreach loop to display the list. Console.Write("Contents: "); foreach(char c in al) Console.Write(c + " "); Console.WriteLine("\n"); Console.WriteLine("Adding 20 more elements"); // Add enough elements to force al to grow. for(int i=0; i < 20; i++) al.Add((char)("a" + i)); Console.WriteLine("Current capacity: " + al.Capacity); Console.WriteLine("Number of elements after adding 20: " + al.Count); Console.Write("Contents: "); foreach(char c in al) Console.Write(c + " "); Console.WriteLine("\n"); // Change contents using array indexing. Console.WriteLine("Change first three elements"); al[0] = "X"; al[1] = "Y"; al[2] = "Z"; Console.Write("Contents: "); foreach(char c in al) Console.Write(c + " "); Console.WriteLine(); }
}
</source>
illustrates the use of an ArrayList that contains objects of the Car class
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example11_3.cs illustrates the use of an ArrayList that contains objects of the Car class
- /
using System; using System.Collections;
// declare the Car class class Car : IComparable {
// declare the fields public string model; public int yearBuilt; // define the constructor public Car(string model, int yearBuilt) { this.model = model; this.yearBuilt = yearBuilt; } // override the ToString() method public override string ToString() { return "model is " + model + ", yearBuilt is " + yearBuilt; } // implement the Compare() method of IComparer public int Compare(object lhs, object rhs) { Car lhsCar = (Car) lhs; Car rhsCar = (Car) rhs; if (lhsCar.yearBuilt < rhsCar.yearBuilt) { return -1; } else if (lhsCar.yearBuilt > rhsCar.yearBuilt) { return 1; } else { return 0; } } // implement the CompareTo() method of IComparable public int CompareTo(object rhs) { return Compare(this, rhs); } // alternative CompareTo() method that simply calls the // CompareTo() method that comes with the int type // (currently commented out) /* public int CompareTo(object rhs) { Car rhsCar = (Car) rhs; return this.yearBuilt.rupareTo(rhsCar.yearBuilt); }*/
}
public class Example11_3 {
// the DisplayArrayList() method displays the elements in the // supplied ArrayList public static void DisplayArrayList( string arrayListName, ArrayList myArrayList ) { for (int counter = 0; counter < myArrayList.Count; counter++) { Console.WriteLine(arrayListName + "[" + counter + "] = " + myArrayList[counter]); } } public static void Main() { // create an ArrayList object ArrayList myArrayList = new ArrayList(); // add four Car objects to myArrayList using the Add() method Console.WriteLine("Adding four Car objects to myArrayList"); Car myMR2 = new Car("MR2", 2001); Car myBoxster = new Car("Boxster", 2001); Car myCorvette = new Car("Corvette", 1999); Car myThunderbird = new Car("Thunderbird", 1979); myArrayList.Add(myMR2); myArrayList.Add(myBoxster); myArrayList.Add(myCorvette); myArrayList.Add(myThunderbird); DisplayArrayList("myArrayList", myArrayList); // use the Contains() method to determine if myBoxster // is in the ArrayList; if it is, then use the IndexOf() // method to display the index if (myArrayList.Contains(myBoxster)) { Console.WriteLine("myArrayList does contain myBoxster"); int index = myArrayList.IndexOf(myBoxster); Console.WriteLine("myBoxster occurs at index " + index); } // remove myBoxster from myArrayList Console.WriteLine("Removing myBoxster from myArrayList"); myArrayList.Remove(myBoxster); DisplayArrayList("myArrayList", myArrayList); // use the Sort() method to sort myArrayList Console.WriteLine("Using the Sort() method to sort myArrayList"); myArrayList.Sort(); DisplayArrayList("myArrayList", myArrayList); // use the BinarySearch() method to search myArrayList for // myCorvette Console.WriteLine("Using the BinarySearch() method to search myArrayList\n" + " for myCorvette"); int index2 = myArrayList.BinarySearch(myCorvette); Console.WriteLine("Found myCorvette at index " + index2); // use the GetRange() method to get a range of elements // from myArrayList Console.WriteLine("Using the GetRange() method to get two\n" + " elements from myArrayList, starting at index 1"); ArrayList anotherArrayList = myArrayList.GetRange(1, 2); DisplayArrayList("anotherArrayList", anotherArrayList); // get an enumerator using the GetEnumerator() method // and use it to read the elements in myArrayList Console.WriteLine("Using the GetEnumerator() method to get an enumerator"); IEnumerator myEnumerator = myArrayList.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); } // use the Reset() method and access the first row again using MoveNext() Console.WriteLine("Using the Reset() method and accessing\n" + " the first row again using MoveNext()"); myEnumerator.Reset(); myEnumerator.MoveNext(); Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); // Use a foreach statement to read the contents of myArrayList Console.WriteLine("Using a foreach statement to read the contents of myArrayList"); foreach (Car myCar in myArrayList) { System.Console.WriteLine("myCar = " + myCar); } }
}
</source>
illustrates the use of ArrayList properties and methods
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example11_2.cs illustrates the use of ArrayList properties and methods
- /
using System; using System.Collections; public class Example11_2 {
// the DisplayArrayList() method displays the elements in the // ArrayList that is supplied as a parameter public static void DisplayArrayList( string arrayListName, ArrayList myArrayList ) { for (int counter = 0; counter < myArrayList.Count; counter++) { Console.WriteLine(arrayListName + "[" + counter + "] = " + myArrayList[counter]); } } public static void Main() { // create an ArrayList object ArrayList myArrayList = new ArrayList(); // set and display the Capacity property myArrayList.Capacity = 10; Console.WriteLine("myArrayList.Capacity = " + myArrayList.Capacity); // display the IsFixedSize and IsReadOnly properties Console.WriteLine("myArrayList.IsFixedSize = " + myArrayList.IsFixedSize); Console.WriteLine("myArrayList.IsReadOnly = " + myArrayList.IsReadOnly); // add eight string elements to myArrayList using the Add(), // Insert(), AddRange(), and InsertRange() methods Console.WriteLine("Adding eight string elements to myArrayList"); myArrayList.Add("This"); myArrayList.Insert(1, "is"); string[] myStringArray = {"a", "test"}; myArrayList.AddRange(myStringArray); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.InsertRange(myArrayList.Count, anotherStringArray); // display the elements in myArrayList using the // DisplayArrayList() method defined earlier DisplayArrayList("myArrayList", myArrayList); // use the SetRange() method to copy the elements from // anotherStringArray to myArrayList, starting at index 0 Console.WriteLine("Using the SetRange() method to copy the\n" + "elements from anotherStringArray to myArrayList,\n" + "starting at index 0"); myArrayList.SetRange(0, anotherStringArray); DisplayArrayList("myArrayList", myArrayList); // use the Contains() method to determine if the string "text" // is in the ArrayList; if it is, then use the IndexOf() and // LastIndexOf() methods to display the first and last occurrence if (myArrayList.Contains("text")) { int index = myArrayList.IndexOf("text"); Console.WriteLine("myArrayList does contain the word "text""); Console.WriteLine(""text" first occurs at index " + index); index = myArrayList.LastIndexOf("text"); Console.WriteLine(""text" last occurs at index " + index); } // remove element 0, first "text" element, and two // elements starting at index 3 Console.WriteLine("Removing elements from myArrayList"); myArrayList.RemoveAt(0); myArrayList.Remove("text"); myArrayList.RemoveRange(3, 2); DisplayArrayList("myArrayList", myArrayList); // use the Sort() method to sort myArrayList Console.WriteLine("Using the Sort() method to sort myArrayList"); myArrayList.Sort(); DisplayArrayList("myArrayList", myArrayList); // use the BinarySearch() method to search myArrayList Console.WriteLine("Using the BinarySearch() method to search myArrayList"); int index2 = myArrayList.BinarySearch("some"); Console.WriteLine("Found "some" at index " + index2); // use the Reverse() method to reverse myArrayList Console.WriteLine("Using the Reverse() method"); myArrayList.Reverse(); DisplayArrayList("myArrayList", myArrayList); // use the TrimToSize() method to reduce the capacity of // myArrayList to the actual number of elements in myArrayList Console.WriteLine("Using the TrimToSize() method to reduce the\n" + "capacity of myArrayList"); myArrayList.TrimToSize(); Console.WriteLine("myArrayList.Capacity = " + myArrayList.Capacity); // use the GetRange() method to get a range of elements // from myArrayList Console.WriteLine("Using the GetRange() method to get two\n" + "elements from myArrayList, starting at index 1"); ArrayList anotherArrayList = myArrayList.GetRange(1, 2); DisplayArrayList("anotherArrayList", anotherArrayList); // get an enumerator using the GetEnumerator() method // and use it to read the elements in myArrayList Console.WriteLine("Using the GetEnumerator() method to get an enumerator"); IEnumerator myEnumerator = myArrayList.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); } // use the Reset() method and access the first row again using MoveNext() Console.WriteLine("Using the Reset() method and accessing\n" + " the first row again using MoveNext()"); myEnumerator.Reset(); myEnumerator.MoveNext(); Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); // Use a foreach statement to read the contents of myArrayList Console.WriteLine("Using a foreach statement to read the contents of myArrayList"); foreach (string myString in myArrayList) { System.Console.WriteLine("myString = " + myString); } }
}
</source>
illustrates the use of ArrayLists 2
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example11_1.cs illustrates the use of ArrayLists
- /
using System; using System.Collections; public class Example11_1 {
// the DisplayArrayList() method displays the elements in the // ArrayList that is supplied as a parameter public static void DisplayArrayList( string arrayListName, ArrayList myArrayList ) { for (int counter = 0; counter < myArrayList.Count; counter++) { Console.WriteLine(arrayListName + "[" + counter + "] = " + myArrayList[counter]); } } public static void Main() { // create an ArrayList object ArrayList myArrayList = new ArrayList(); // display the Capacity property Console.WriteLine("myArrayList.Capacity = " + myArrayList.Capacity); // add four strings to myArrayList using the Add() method myArrayList.Add("This"); myArrayList.Add("is"); myArrayList.Add("a"); myArrayList.Add("test"); // display the contents of myArrayList using DisplayArrayList() DisplayArrayList("myArrayList", myArrayList); // create another ArrayList, passing myArrayList to the // constructor of the new ArrayList ArrayList anotherArrayList = new ArrayList(myArrayList); // display the contents of anotherArrayList DisplayArrayList("anotherArrayList", anotherArrayList); }
}
</source>
Inserting into an ArrayList by index
<source lang="csharp">
using System; using System.Collections; class MainClass {
public static void Main() { ArrayList al = new ArrayList(5); // Add three elements to the end of the array al.Add(10); al.Add(9); al.Add(8); // Now, insert three elements in the front of the array al.Insert(0, 1); al.Insert(0, 2); al.Insert(0, 3); // Finally, insert into some random spots al.Insert(2, 4); al.Insert(4, 5); al.Insert(6, 6);
// Enumerate the array foreach (int i in al) { Console.WriteLine("Entry {0}", i); } }
}
</source>
Remove range from ArrayList
<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Text; class Program {
static void Main(string[] args) { ArrayList baseballTeams = new ArrayList(); baseballTeams.Add("s"); baseballTeams.Add("r"); baseballTeams.Add("i"); string[] myStringArray = new string[2]; myStringArray[0] = "t"; myStringArray[1] = "L"; baseballTeams.AddRange(myStringArray); baseballTeams.RemoveRange(2, 2); foreach (string item in baseballTeams) { Console.Write(item + "\n"); } Console.ReadLine(); }
}
</source>
Sort and search an ArrayList
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Sort and search an ArrayList.
using System; using System.Collections;
public class SortSearchDemo {
public static void Main() { // create an array list ArrayList al = new ArrayList(); // Add elements to the array list al.Add(55); al.Add(43); al.Add(-4); al.Add(88); al.Add(3); al.Add(19); Console.Write("Original contents: "); foreach(int i in al) Console.Write(i + " "); Console.WriteLine("\n"); // Sort al.Sort(); // Use foreach loop to display the list. Console.Write("Contents after sorting: "); foreach(int i in al) Console.Write(i + " "); Console.WriteLine("\n"); Console.WriteLine("Index of 43 is " + al.BinarySearch(43)); }
}
</source>
Using foreach to loop through ArrayList and use Indexer of ArrayList
<source lang="csharp">
using System; using System.Collections; class CollectionsDemo {
public static void Main(String[] args) { ArrayList PokerPlayers = new ArrayList(3); PokerPlayers.Add("J"); PokerPlayers.Add("M"); PokerPlayers.Add("A"); PokerPlayers.Add("J"); foreach (String Player in PokerPlayers) { Console.WriteLine(Player); } PokerPlayers[0] = "A"; System.Console.WriteLine(PokerPlayers[0]); }
}
</source>