Csharp/CSharp Tutorial/Data Structure/ArrayList
Содержание
- 1 ArrayList: AddRange
- 2 ArrayList Query
- 3 Box ints into ArrayList
- 4 Capacity and element count
- 5 Change contents using array indexing
- 6 Clear an ArrayList
- 7 Create a string array and use the ICollection.CopyTo method to copy the contents of the ArrayList
- 8 Filter int from ArrayList
- 9 Get an enumerator using the GetEnumerator() method and use it to read the elements in ArrayList
- 10 Get the number of elements
- 11 Insert(), AddRange(), and InsertRange() methods
- 12 Insert and remove at specific index
- 13 Insert item to ArrayList by index
- 14 IsFixedSize and IsReadOnly properties
- 15 Make an ArrayList Synchronized
- 16 Re-enumerate the list
- 17 Remove element 0, first "text" element, and two elements starting at index 3
- 18 Remove elements from ArrayList
- 19 Sort and search an ArrayList
- 20 Use ArrayList copy constructor
- 21 Use ArrayList.ToArray to create an object array from the contents of the collection
- 22 Use enumerator to access list
- 23 Use the Contains() method to determine if the string "text" is in the ArrayList
- 24 Use the IndexOf() and LastIndexOf() methods to display the first and last occurrence
- 25 Use the Reset() method and access the first row again using MoveNext()
- 26 Use the Reverse() method to reverse myArrayList
- 27 Use the SetRange() method to copy the elements from anotherStringArray to myArrayList, starting at index 0
- 28 Using the GetRange() method to get two elements from myArrayList, starting at index 1
- 29 Using the TrimToSize() method to reduce the capacity of ArrayList
ArrayList: AddRange
<source lang="csharp">using System; using System.Collections; using System.Collections.Specialized; class MyClass{
public string MyName="";
} class MainClass {
static void Main(string[] args) { ArrayList classList = new ArrayList(); classList.AddRange(new MyClass[] { new MyClass(), new MyClass(), new MyClass()}); Console.WriteLine("Items in List: {0}", classList.Count); // Print out current values. foreach(MyClass c in classList) { Console.WriteLine("MyClass name: {0}", c.MyName); } }
}</source>
Items in List: 3 MyClass name: MyClass name: MyClass name:
ArrayList Query
<source lang="csharp">using System; using System.Collections; using System.ruponentModel;
public class Product { string name; public string Name { get { return name; } } decimal price; public decimal Price { get { return price; } } public Product(string name, decimal price) { this.name = name; this.price = price; } public static ArrayList GetSampleProducts() { ArrayList list = new ArrayList(); list.Add(new Product("C", 9.99m)); list.Add(new Product("A", 1.99m)); list.Add(new Product("F", 2.99m)); list.Add(new Product("S", 3.99m)); return list; } public override string ToString() { return string.Format("{0}: {1}", name, price); } } class ArrayListSort { class ProductNameComparer : IComparer { public int Compare(object x, object y) { Product first = (Product)x; Product second = (Product)y; return first.Name.rupareTo(second.Name); } } static void Main() { ArrayList products = Product.GetSampleProducts(); products.Sort(new ProductNameComparer()); foreach (Product product in products) { Console.WriteLine(product); } } }</source>
Box ints into ArrayList
<source lang="csharp">using System; using System.Collections; class MainClass {
static void Main(string[] args) { ArrayList myInts = new ArrayList(); myInts.Add(8); myInts.Add(3); myInts.Add(9); // Unbox first item. int firstItem = (int)myInts[0]; // Another boxing operation! Console.WriteLine("First item is {0}", firstItem); }
}</source>
First item is 8
Capacity and element count
<source lang="csharp">using System; using System.Collections;
class MainClass {
public static void Main() { ArrayList al = new ArrayList(); Console.WriteLine("Adding 6 elements"); al.Add("C"); al.Add("A"); al.Add("E"); al.Add("B"); al.Add("D"); al.Add("F"); Console.WriteLine("Add enough elements to force ArrayList to grow. Adding 20 more elements"); 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"); }
}</source>
Adding 6 elements Add enough elements to force ArrayList to grow. Adding 20 more elements Current capacity: 32 Number of elements after adding 20: 26 Contents: C A E B D F a b c d e f g h i j k l m n o p q r s t
Change contents using array indexing
<source lang="csharp">using System; using System.Collections;
class MainClass {
public static void Main() { ArrayList al = new ArrayList(); 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("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>
Adding 6 elements Change first three elements Contents: X Y Z B D F
Clear an ArrayList
<source lang="csharp">using System; using System.Collections; class MainClass {
static void Main(string[] args) { ArrayList a = new ArrayList(10); int x = 0; a.Add( ++x); a.Add( ++x); a.Add( ++x); a.Add( ++x); a.Remove(x); a.RemoveAt(0); a.Clear(); }
}</source>
Create a string array and use the ICollection.CopyTo method to copy the contents of the ArrayList
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main(string[] args) { // Create a new ArrayList and populate it. 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); Console.WriteLine("Array 1:"); foreach (string s in array1) { Console.WriteLine("\t{0}",s); } }
}</source>
Array 1: B G J S M
Filter int from ArrayList
<source lang="csharp">using System; using System.Collections.Generic; using System.Text; using System.Xml.Linq; using System.Linq; using System.Collections;
class Car { public string PetName; public string Color; public int Speed; public string Make; } class Program { static void Main(string[] args) { ArrayList myStuff = new ArrayList(); myStuff.AddRange(new object[] { 10, 400, 8, false, new Car(), "string data" }); IEnumerable<int> myInts = myStuff.OfType<int>(); foreach (int i in myInts) { Console.WriteLine("Int value: {0}", i); } } }</source>
Get an enumerator using the GetEnumerator() method and use it to read the elements in ArrayList
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray); Console.WriteLine("Using the GetEnumerator() method to get an enumerator"); IEnumerator myEnumerator = myArrayList.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); } }
}</source>
Get the number of elements
<source lang="csharp">using System; using System.Collections;
class MainClass {
public static void Main() { ArrayList al = new ArrayList(); Console.WriteLine("Initial number of elements: " + al.Count); 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("Number of elements: " + al.Count); }
}</source>
Initial number of elements: 0 Adding 6 elements Number of elements: 6
Insert(), AddRange(), and InsertRange() methods
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("is"); myArrayList.Insert(1, "is"); string[] myStringArray = {"a", "test"}; myArrayList.AddRange(myStringArray); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.InsertRange(myArrayList.Count, anotherStringArray); DisplayArrayList("myArrayList", myArrayList); } public static void DisplayArrayList(string arrayListName, ArrayList myArrayList) { for (int i = 0; i < myArrayList.Count; i++){ Console.WriteLine(arrayListName + "[" + i + "] = " + myArrayList[i]); } }
}</source>
myArrayList[0] = is myArrayList[1] = is myArrayList[2] = a myArrayList[3] = test myArrayList[4] = Here"s myArrayList[5] = some myArrayList[6] = more myArrayList[7] = text
Insert and remove at specific index
<source lang="csharp">using System; using System.Collections; class MainClass {
static void Main(string[] args) { ArrayList a = new ArrayList(10); int x = 0; a.Add( ++x); a.Add( ++x); a.Add( ++x);
a.Remove(x); a.RemoveAt(0); }
}</source>
Insert item to ArrayList by index
<source lang="csharp">using System; using System.Collections; using System.Collections.Specialized; class MyClass{
public string MyName="";
} class MainClass {
static void Main(string[] args) { ArrayList classList = new ArrayList(); classList.AddRange(new MyClass[] { new MyClass(), new MyClass(), new MyClass()}); Console.WriteLine("Items in List: {0}", classList.Count); classList.Insert(2, new MyClass()); Console.WriteLine("Items in classList: {0}", classList.Count); // Print out current values. foreach(MyClass c in classList) { Console.WriteLine("MyClass name: {0}", c.MyName); } }
}</source>
Items in List: 3 Items in classList: 4 MyClass name: MyClass name: MyClass name: MyClass name:
IsFixedSize and IsReadOnly properties
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); Console.WriteLine("myArrayList.IsFixedSize = " + myArrayList.IsFixedSize); Console.WriteLine("myArrayList.IsReadOnly = " + myArrayList.IsReadOnly); }
}</source>
myArrayList.IsFixedSize = False myArrayList.IsReadOnly = False
Make an ArrayList Synchronized
<source lang="csharp">using System; using System.Collections; class MainClass {
static void Main(string[] args) { ArrayList a = new ArrayList(10); ArrayList.Synchronized(a); }
}</source>
Re-enumerate the list
<source lang="csharp">using System; using System.Collections;
class MainClass {
public static void Main() { ArrayList list = new ArrayList(1); for(int i=0; i < 10; i++) list.Add(i); IEnumerator etr = list.GetEnumerator(); while(etr.MoveNext()) Console.Write(etr.Current + " "); Console.WriteLine(); etr.Reset(); while(etr.MoveNext()) Console.Write(etr.Current + " "); Console.WriteLine(); }
}</source>
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
Remove element 0, first "text" element, and two elements starting at index 3
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray);
myArrayList.RemoveAt(0); myArrayList.Remove("text"); myArrayList.RemoveRange(3, 2); DisplayArrayList("myArrayList", myArrayList); } public static void DisplayArrayList(string arrayListName, ArrayList myArrayList) { for (int i = 0; i < myArrayList.Count; i++){ Console.WriteLine(arrayListName + "[" + i + "] = " + myArrayList[i]); } }
}</source>
Remove elements from ArrayList
<source lang="csharp">using System; using System.Collections;
class MainClass {
public static void Main() { ArrayList al = new ArrayList(); 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("Removing 2 elements"); // Remove elements from the array list. al.Remove("F"); al.Remove("A"); Console.WriteLine("Number of elements: " + al.Count); }
}</source>
Adding 6 elements Removing 2 elements Number of elements: 4
Sort and search an ArrayList
<source lang="csharp">using System; using System.Collections;
class MainClass {
public static void Main() { // create an array list ArrayList al = new ArrayList(); // Add elements to the array list al.Add(155); al.Add(413); al.Add(-41); al.Add(818); al.Add(31); al.Add(191); 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 413 is " + al.BinarySearch(413)); }
}</source>
Original contents: 155 413 -41 818 31 191 Contents after sorting: -41 31 155 191 413 818 Index of 413 is 4
Use ArrayList copy constructor
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("This"); myArrayList.Add("is"); myArrayList.Add("a"); myArrayList.Add("test"); ArrayList anotherArrayList = new ArrayList(myArrayList); Console.WriteLine(anotherArrayList); }
}</source>
Use ArrayList.ToArray to create an object array from the contents of the collection
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main(string[] args) { // Create a new ArrayList and populate it. ArrayList list = new ArrayList(5); list.Add("B"); list.Add("G"); list.Add("J"); list.Add("S"); list.Add("M"); object[] array2 = list.ToArray(); Console.WriteLine("Array 2:"); foreach (string s in array2) { Console.WriteLine("\t{0}", s); } }
}</source>
Array 2: B G J S M
Use enumerator to access list
<source lang="csharp">using System; using System.Collections;
class MainClass {
public static void Main() { ArrayList list = new ArrayList(1); for(int i=0; i < 10; i++) list.Add(i); IEnumerator etr = list.GetEnumerator(); while(etr.MoveNext()) Console.Write(etr.Current + " "); Console.WriteLine(); }
}</source>
0 1 2 3 4 5 6 7 8 9
Use the Contains() method to determine if the string "text" is in the ArrayList
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray);
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); } }
}</source>
Use the IndexOf() and LastIndexOf() methods to display the first and last occurrence
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray);
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); } }
}</source>
Use the Reset() method and access the first row again using MoveNext()
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray); Console.WriteLine("Using the GetEnumerator() method to get an enumerator"); IEnumerator myEnumerator = myArrayList.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); } myEnumerator.Reset(); myEnumerator.MoveNext(); Console.WriteLine("myEnumerator.Current = " + myEnumerator.Current); }
}</source>
Use the Reverse() method to reverse myArrayList
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray); myArrayList.Reverse(); DisplayArrayList("myArrayList", myArrayList); } public static void DisplayArrayList(string arrayListName, ArrayList myArrayList) { for (int i = 0; i < myArrayList.Count; i++){ Console.WriteLine(arrayListName + "[" + i + "] = " + myArrayList[i]); } }
}</source>
Use the SetRange() method to copy the elements from anotherStringArray to myArrayList, starting at index 0
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray);
DisplayArrayList("myArrayList", myArrayList); } public static void DisplayArrayList(string arrayListName, ArrayList myArrayList) { for (int i = 0; i < myArrayList.Count; i++){ Console.WriteLine(arrayListName + "[" + i + "] = " + myArrayList[i]); } }
}</source>
Using the GetRange() method to get two elements from myArrayList, starting at index 1
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray); ArrayList anotherArrayList = myArrayList.GetRange(1, 2); DisplayArrayList("anotherArrayList", anotherArrayList); } public static void DisplayArrayList(string arrayListName, ArrayList myArrayList) { for (int i = 0; i < myArrayList.Count; i++){ Console.WriteLine(arrayListName + "[" + i + "] = " + myArrayList[i]); } }
}</source>
Using the TrimToSize() method to reduce the capacity of ArrayList
<source lang="csharp">using System; using System.Collections; class MainClass {
public static void Main() { ArrayList myArrayList = new ArrayList(); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); myArrayList.Add("A"); string[] anotherStringArray = {"Here"s", "some", "more", "text"}; myArrayList.SetRange(0, anotherStringArray); myArrayList.TrimToSize(); Console.WriteLine("myArrayList.Capacity = " + myArrayList.Capacity); }
}</source>