Csharp/CSharp Tutorial/Data Structure/ArrayList — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 12:15, 26 мая 2010
Содержание
- 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
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);
}
}
}
Items in List: 3 MyClass name: MyClass name: MyClass name:
ArrayList Query
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);
}
}
}
Box ints into ArrayList
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);
}
}
First item is 8
Capacity and element count
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");
}
}
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
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();
}
}
Adding 6 elements Change first three elements Contents: X Y Z B D F
Clear an ArrayList
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();
}
}
Create a string array and use the ICollection.CopyTo method to copy the contents of the ArrayList
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);
}
}
}
Array 1: B G J S M
Filter int from ArrayList
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);
}
}
}
Get an enumerator using the GetEnumerator() method and use it to read the elements in ArrayList
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);
}
}
}
Get the number of elements
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);
}
}
Initial number of elements: 0 Adding 6 elements Number of elements: 6
Insert(), AddRange(), and InsertRange() methods
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]);
}
}
}
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
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);
}
}
Insert item to ArrayList by index
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);
}
}
}
Items in List: 3 Items in classList: 4 MyClass name: MyClass name: MyClass name: MyClass name:
IsFixedSize and IsReadOnly properties
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);
}
}
myArrayList.IsFixedSize = False myArrayList.IsReadOnly = False
Make an ArrayList Synchronized
using System;
using System.Collections;
class MainClass
{
static void Main(string[] args)
{
ArrayList a = new ArrayList(10);
ArrayList.Synchronized(a);
}
}
Re-enumerate the list
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();
}
}
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
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]);
}
}
}
Remove elements from ArrayList
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);
}
}
Adding 6 elements Removing 2 elements Number of elements: 4
Sort and search an ArrayList
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));
}
}
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
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);
}
}
Use ArrayList.ToArray to create an object array from the contents of the collection
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);
}
}
}
Array 2: B G J S M
Use enumerator to access list
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();
}
}
0 1 2 3 4 5 6 7 8 9
Use the Contains() method to determine if the string "text" is in the ArrayList
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);
}
}
}
Use the IndexOf() and LastIndexOf() methods to display the first and last occurrence
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);
}
}
}
Use the Reset() method and access the first row again using MoveNext()
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);
}
}
Use the Reverse() method to reverse myArrayList
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]);
}
}
}
Use the SetRange() method to copy the elements from anotherStringArray to myArrayList, starting at index 0
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]);
}
}
}
Using the GetRange() method to get two elements from myArrayList, starting at index 1
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]);
}
}
}
Using the TrimToSize() method to reduce the capacity of ArrayList
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);
}
}