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<String> set = new HashSet<String>();
    set.add("Regen");
    set.add("In");
    set.add("Regensburg");

     // Iterator für das Set abrufen
     Iterator<String> iterator = set.iterator();

    while (iterator.hasNext())        // Prüfen, ob ein weiteres Element vorhanden ist
    {
       // Aktuelles Element abrufen und zum nächsten gehen
       String text = iterator.next();

        System.out.println(text);
    }
}
2
Aufgabe
Java Syntax,  Level 8Lektion 2
Gesperrt
Code-Eingabe
Manchmal darf man gar nicht nachdenken, man muss es einfach raushauen! Auch wenn es sich paradox anhört, manchmal „erinnern“ sich deine Finger besser als dein bewusster Verstand. Deshalb wirst du es im Rahmen der Schulung im geheimen CodeGym-Zentrum manchmal mit Aufgaben zu tun bekommen, bei denen du Code eingeben musst. Wenn du Code eingibst, gewöhnst du dich an die Syntax und sammelst ein wenig dunkle Materie. Außerdem tust du etwas gegen deine Faulheit!
Elemente einer Liste anzeigen
public static void main(String[] args)
{
    List<String> liste = new ArrayList<String>();
    liste.add("Regen");
    liste.add("In");
    liste.add("Regensburg");

    Iterator<String> iterator = liste.iterator();// Iterator für die Liste abrufen

    while (iterator.hasNext())      // Prüfen, ob ein weiteres Element vorhanden ist
    {
        // Aktuelles Element abrufen und zum nächsten gehen
        String text = iterator.next();

        System.out.println(text);
    }
}
Elemente einer Map anzeigen
public static void main(String[] args)
{
    // Alle Elemente werden paarweise gespeichert
    Map<String, String> map = new HashMap<String, String>();
    map.put("erstes", "Regen");
    map.put("zweites", "In");
    map.put("drittes", "Regensburg");

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

   while (iterator.hasNext())
    {
        // Schlüssel-Wert-Paar abrufen
        Map.Entry<String, String> paar = iterator.next();
        String schluessel = paar.getKey();            // Schlüssel
        String wert = paar.getValue();        // Wert
        System.out.println(schluessel + ":" + wert);
    }
}

„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<String> set = new HashSet<String>();
    set.add("Regen");
    set.add("In");
    set.add("Regensburg");

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

   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<String> 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<String> set = new HashSet<String>();
    set.add("Regen");
    set.add("In");
    set.add("Regensburg");

    for (String text : set)
    {
        System.out.println(text);
    }
}
Elemente einer Liste anzeigen
public static void main(String[] args)
{
    List<String> liste = new ArrayList<String>();
    liste.add("Regen");
    liste.add("In");
    liste.add("Regensburg");

     for (String text : liste)
    {
        System.out.println(text);
    }
}
Elemente einer Map anzeigen
public static void main(String[] args)
{
    Map<String, String> map = new HashMap<String, String>();
    map.put("erstes", "Regen");
    map.put("zweites", "In");
    map.put("drittes", "Regensburg");

    for (Map.Entry<String, String> paar : map.entrySet())
    {
        String schluessel = paar.getKey();                      // Schlüssel
        String wert = paar.getValue();                  // Wert
        System.out.println(schluessel + ":" + wert);
    }
}

„So macht man das!“

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