Liste aller Collections - 1

„Hi, Amigo.“

„Hey, Ritschie.“

„Ellie sagte mir, du hättest gerne mehr Beispiele für Collections. Ich gebe dir ein paar. Hier ist eine Liste der Collections und Schnittstellen:“

Schnittstelle Klasse/Implementierung Beschreibung
List  ArrayList  List
 LinkedList  List
 Vector  Vector
 Stack  Stack
 Set    HashSet  Set
 TreeSet  Set
 SortedSet  Sorted set
Map  HashMap Map/dictionary
 TreeMap  Map/dictionary
 SortedMap  Sorted dictionary
 Hashtable  Hash-table

„Hmm. Das sind ja eine ganze Menge. Vier Listen, drei Sets und vier Maps.“

„Ja, das sind alles verschiedene Implementierungen der Schnittstellen List, Set und Map.“

„Worin besteht der Unterschied zwischen diesen Implementierungen?“

„Genau darüber möchte ich heute mit dir sprechen. Hab ein wenig Geduld.“

„Hast du sonst noch Fragen?“

„Ich weiß, wie man eine Liste auf dem Bildschirm anzeigt. Wie kann ich ein Set oder eine Map anzeigen?“

„Die Elemente einer Liste haben eine feste Reihenfolge, du kannst sie also einfach über einen Index anzeigen. Bei einem Set oder eine Map gibt es keine bestimmte Reihenfolge. Tatsächlich kann sich die Reihenfolge der Elemente ändern, wenn Elemente gelöscht oder neue Elemente hinzugefügt werden.“

„Unglaublich.“

„Deshalb wurden spezielle Objekte, sogenannte Iteratoren, erfunden, um mit den Elementen von Collections zu arbeiten. Mit ihnen kannst du alle Elemente einer Collection durchgehen, auch wenn sie nur Namen statt Indizes (Map) oder weder Namen noch Indizes (Set) besitzen.“

„Hier ein paar Beispiele:“

Elemente eines Sets anzeigen
 public static void main(String[] args)
{
    Set&ltString> set = new HashSet&ltString>();
    set.add("Rain");
    set.add("In");
    set.add("Spain");

     // Get an iterator for the set
     Iterator&ltString> iterator = set.iterator();

    while (iterator.hasNext())        // Check if there is another element
    {
       // Get the current element and move to the next one
       String text = iterator.next();

        System.out.println(text);
    }
}
 
Elemente einer Liste anzeigen
public static void main(String[] args)
{
    List&ltString> list = new ArrayList&ltString>();
    list.add("Rain");
    list.add("In");
    list.add("Spain");

    Iterator&ltString> iterator = list.iterator();// Get an iterator for the list

    while (iterator.hasNext())      // Check if there is another element   
    {
        // Get the current element and move to the next one
        String text = iterator.next();

        System.out.println(text);
    }
}
Elemente einer Map anzeigen
public static void main(String[] args)
{
    // All elements are stored in pairs
    Map<String, String> map = new HashMap<String, String>();
    map.put("first", "Rain");
    map.put("second", "In");
    map.put("third", "Spain");

    Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();

   while (iterator.hasNext())
    {
        // Get a key-value pair
        Map.Entry<String, String> pair = iterator.next();
        String key = pair.getKey();            // Key
        String value = pair.getValue();        // Value
        System.out.println(key + ":" + value);
    }
}

„Wow! Ich frage mich, was das alles bedeutet.“

„Es ist eigentlich ganz einfach. Zuerst rufen wir ein spezielles Objekt, einen Iterator, aus der Collection ab. Der Iterator hat nur zwei Methoden.

1. Die Methode next() gibt das nächste Element in der Collection zurück.

2. Die Methode hasNext() prüft, ob es noch Elemente gibt, die nicht von next() zurückgegeben wurden.“

„Okay. Ich glaube, jetzt verstehe ich es so langsam. Lass mich versuchen, zu wiederholen, wie ich es verstanden habe.“

„Also... Zuerst müssen wir die iterator()-Methode einer Collection aufrufen, um dieses magische Iterator-Objekt zu erhalten.“

„Dann rufen wir die Elemente nacheinander ab, bis keine zum Abrufen mehr vorhanden sind. Wir rufen das nächste Element in der Collection durch Aufruf von next() ab, und wir überprüfen, ob es noch Elemente in der Collection gibt, indem wir die hasNext()-Methode des Iterators aufrufen. Ist das richtig?“

„Ja, mehr oder weniger. Aber warte auf den guten Teil.“

„Java bietet eine Abkürzung für die Arbeit mit Iteratoren. Nach dem Muster von while und for wurde eine weitere besondere Anweisung hinzugefügt: for each. Sie wird ebenfalls durch das Schlüsselwort for angezeigt.“

„Die for-each-Anweisung wird nur für die Arbeit mit Collections und Containern verwendet. Implizit verwendet sie einen Iterator, aber wir sehen nur das zurückgegebene Element.“

„Ich möchte dir die lange und kurze Variante zeigen, mit einem Iterator zu arbeiten:“

Lange Variante
public static void main(String[] args)
{
  Set&ltString> set = new HashSet&ltString>();
    set.add("Rain");
    set.add("In");
    set.add("Spain");

    Iterator&ltString> iterator = set.iterator();
  while (iterator.hasNext())
  {
    String text = iterator.next();
    System.out.println(text);
  }
}
Kurze Variante
public static void main(String[] args)
{
    Set&ltString> set = new HashSet&ltString>();
    set.add("Rain");
    set.add("In");
    set.add("Spain");

   for (String text : set)   
    {
        System.out.println(text);
    }
}


„Beachte bitte, dass die rot oder grün markierten Wörter im rechten Teil fehlen. Tatsächlich werden drei Zeilen durch eine ersetzt:“

Lange Variante
Iterator&ltString> iterator = set.iterator();
while (iterator.hasNext())
{
    String text = iterator.next();
Kurze Variante

for (String text : set)


„Das sieht toll aus. Mir gefällt es so viel besser.“

„Sehen wir uns die Kurzfassung der obigen Beispiele an:“

Elemente eines Sets anzeigen
public static void main(String[] args)
{
    Set&ltString> set = new HashSet&ltString>();
    set.add("Rain");
    set.add("In");
    set.add("Spain");

    for (String text : set)   
    {
        System.out.println(text);
    }
}
Elemente einer Liste anzeigen
public static void main(String[] args)
{
    List&ltString> list = new ArrayList&ltString>();
    list.add("Rain");
    list.add("In");
    list.add("Spain");

     for (String text : list)        
    {
        System.out.println(text);
    }
}
Elemente einer Map anzeigen
public static void main(String[] args)
{
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("first", "Rain");
    map.put("second", "In");
    map.put("third", "Spain");

    for (Map.Entry<String, String> pair : map.entrySet())
    {
        String key = pair.getKey();                      // Key
        String value = pair.getValue();                  // Value
        System.out.println(key + ":" + value);
    }
}

„So macht man das!“

„Ich bin froh, dass es dir gefällt.“