"Hej, Amigo."

"Hej, Rishi."

"Ellie fortalte mig, at du ville have flere eksempler på samlinger. Jeg vil give dig et par stykker. Her er en liste over samlinger og grænseflader:"

Interface Klasse/implementering Beskrivelse
Liste  ArrayList  Liste
 LinkedList  Liste
 Vektor  Vektor
 Stak  Stak
 Sæt    HashSet  Sæt
 Træsæt  Sæt
 Sorteret Sæt  Sorteret sæt
Kort  HashMap Kort/ordbog
 Trækort  Kort/ordbog
 Sorteret kort  Sorteret ordbog
 Hastbar  Hash-tabel

"Hmm. Det er ret meget. Fire lister, tre sæt og fire kort."

"Ja, de er alle forskellige implementeringer af liste-, sæt- og kortgrænseflader."

"Hvad er forskellen mellem disse implementeringer?"

"Det er præcis det, vi skal tale om i dag. Bare vær tålmodig."

"Har du andre spørgsmål?"

"Jeg ved, hvordan man viser en liste på skærmen. Hvordan viser jeg et sæt eller kort?"

"Elementerne i en liste har en fast rækkefølge, så du kan bare bruge et indeks til at vise dem. For et sæt eller kort er der ingen specifik rækkefølge. Faktisk kan rækkefølgen af ​​deres elementer ændre sig, efterhånden som elementer slettes eller nye elementer tilføjes."

"Fantastiske."

"Det er grunden til, at specielle objekter, kaldet iteratorer , blev opfundet for at arbejde med samlingselementer. De lader dig gennemgå alle elementerne i en samling, selvom de kun har navne i stedet for indekser (Kort), eller hverken navne eller indekser ( Sæt)."

"Her er nogle eksempler:"

Vis elementer af et sæt
 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);
    }
}
 
Vis elementer af en liste
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);
    }
}
Vis elementer af et kort
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. Jeg spekulerer på, hvad alt det betyder."

"Det er faktisk ret simpelt. Først får vi et særligt objekt, en iterator, fra samlingen. Iteratoren har kun to metoder.

1. Next()-metoden returnerer det næste element i samlingen.

2. HasNext()-metoden kontrollerer, om der stadig er elementer, der ikke er blevet returneret af next()."

"OK. Jeg tror, ​​det bliver klarere nu. Lad mig prøve at gentage tilbage til dig, hvad jeg forstod."

"Så... Først skal vi kalde iterator()-metoden på en samling for at få dette magiske iteratorobjekt."

"Så får vi elementer et efter et, så længe der er nogen tilbage at hente. Vi får det næste element i samlingen ved at kalde next(), og vi tjekker, om der stadig er elementer i samlingen ved at kalde hasNext() på iterator. Er det korrekt?"

"Ja, mere eller mindre. Men vent på den gode del."

"Java har stenografi til at arbejde med iteratorer. Efter mønsteret while og for , er der tilføjet en mere speciel erklæring: for hver . Det er også angivet ved hjælp af nøgleordet for ."

"For-each-sætningen bruges kun til at arbejde med samlinger og containere. Den bruger en iterator implicit, men vi ser kun det returnerede element."

"Lad mig vise dig de lange og stenografiske måder at arbejde med en iterator på:"

Langhånd
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);
  }
}
Stenografi
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);
    }
}


"Bemærk, at ordene fremhævet med rødt eller grønt er fraværende i højre del. Faktisk er tre linjer erstattet af en:"

Langhånd
Iterator&ltString> iterator = set.iterator();
while (iterator.hasNext())
{
    String text = iterator.next();
Stenografi

for (String text : set)


"Det her ser fantastisk ud. Jeg kan meget bedre lide det på denne måde."

"Lad os se på den stenografiske version af eksemplerne ovenfor:"

Vis elementer af et sæt
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);
    }
}
Vis elementer af en liste
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);
    }
}
Vis elementer af et kort
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);
    }
}

"Nu taler du!"

"Jeg er glad for at du kunne lide det."