Collections Data Structure C#

/*
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.CompareTo(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);
    }
  }
}