using System;
using System.Collections;

class Item
{
    int value;

    public Item(int i)
    {
        value = i;
    }

    public override string ToString()
    {
        return value.ToString();
    }

    public override int GetHashCode()
    {
        return 17 * value;
    }

    public override bool Equals(Object obj)
    {
        return value.Equals(((Item)obj).value);
    }
}


class Program
{
    static void Main(string[] args)
    {
        // Container gewünschter Anfangskapazität erzeugen
        ArrayList container = new ArrayList(7);

        // Elemente in Container ablegen
        container.Add(new Item(10));
        container.Add(new Item(20));
        container.Add(new Item(30));
        container.Add(new Item(40));
        container.Add(new Item(50));

        // Elemente in Container mit Hilfe eines Enumerators durchlaufen und ausgeben    
        Console.WriteLine("\n Elemente in Auflistung: ");
        foreach (Item elem in container)
            Console.WriteLine(" {0}", elem);

        Console.WriteLine();

        // Element 30 suchen (Elemente werden mit Equals() verglichen);
        // wenn vorhanden, löschen und die hinteren Elemente  nach vorne schieben
        container.Remove(new Item(30));

        Console.WriteLine(" Element mit dem Wert 30 löschen");

        // 3. Element abfragen
        Item oldItem = (Item)container[2];

        // 3. Element austauschen
        container[2] = new Item(44);

        Console.WriteLine(" 3. Element ({0}) durch {1} ersetzt",
                         oldItem, (Item)container[2]);

        // zwischen 1. und 2. Element ein neues Element einfügen
        container.Insert(1, new Item(15));

        Console.WriteLine(" Nach 1. Element ein neues Element {0} eingefügt",
                          (Item)container[1]);

        Console.WriteLine("\n Elemente in Auflistung: ");
        foreach (Item elem in container)
            Console.WriteLine(" {0}", elem);
    }
}

