"Hej, Amigo."

"Hej, Rishi."

"Ellie sa till mig att du ville ha fler exempel på samlingar. Jag ska ge dig några. Här är en lista över samlingar och gränssnitt:"

Gränssnitt Klass/implementering Beskrivning
Lista  ArrayList  Lista
 Länkad lista  Lista
 Vektor  Vektor
 Stack  Stack
 Uppsättning    HashSet  Uppsättning
 Träduppsättning  Uppsättning
 SorteradSet  Sorterat set
Karta  HashMap Karta/ordbok
 Trädkarta  Karta/ordbok
 Sorterad karta  Sorterad ordbok
 Hastbar  Hash-tabell

"Hmm. Det är ganska mycket. Fyra listor, tre uppsättningar och fyra kartor."

"Ja, de är alla olika implementeringar av gränssnitten List, Set och Map."

"Vad är skillnaden mellan dessa implementeringar?"

"Det är precis vad vi ska prata om idag. Ha bara tålamod."

"Har du några andra frågor?"

"Jag vet hur man visar en lista på skärmen. Hur visar jag en uppsättning eller karta?"

"Elementen i en lista har en bestämd ordning, så du kan bara använda ett index för att visa dem. För en uppsättning eller karta finns det ingen specifik ordning. Faktum är att ordningen på deras element kan ändras när objekt tas bort eller nya objekt läggs till."

"Fantastisk."

"Det är därför speciella objekt, kallade iteratorer , uppfanns för att arbeta med samlingselement. De låter dig gå igenom alla element i en samling, även om de bara har namn istället för index (Map), eller varken namn eller index ( Uppsättning)."

"Här är några exempel:"

Visa element i en uppsättning
 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);
    }
}
 
Visa element i en lista
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);
    }
}
Visa delar av en karta
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. Jag undrar vad allt det betyder."

"Det är faktiskt ganska enkelt. Först får vi ett speciellt objekt, en iterator, från samlingen. Iteratorn har bara två metoder.

1. Metoden next() returnerar nästa element i samlingen.

2. Metoden hasNext() kontrollerar om det fortfarande finns element som inte har returnerats av next()."

"OK. Jag tror att det blir tydligare nu. Låt mig försöka återkomma till dig vad jag förstod."

"Så... Först måste vi anropa iterator()-metoden på en samling för att få detta magiska iteratorobjekt."

"Då får vi element ett efter ett så länge det finns några kvar att hämta. Vi får nästa element i samlingen genom att anropa next(), och vi kontrollerar om det fortfarande finns element i samlingen genom att anropa hasNext() på iterator. Stämmer det?"

"Ja, mer eller mindre. Men vänta på det goda."

"Java har förkortning för att arbeta med iteratorer. Efter mönstret while och for , har ytterligare ett speciellt uttalande lagts till: för varje . Det indikeras också med nyckelordet för ."

"For-each-satsen används bara för att arbeta med samlingar och behållare. Den använder en iterator implicit, men vi ser bara det returnerade elementet."

"Låt mig visa dig de långa och stenografiska sätten att arbeta med en iterator:"

Långhand
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);
    }
}


"Observera att orden markerade i rött eller grönt saknas i den högra delen. Faktum är att tre rader ersätts med en:"

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

for (String text : set)


"Det här ser underbart ut. Jag gillar det mycket bättre på det här sättet."

"Låt oss titta på förkortningsversionen av exemplen ovan:"

Visa element i en uppsättning
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);
    }
}
Visa element i en lista
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);
    }
}
Visa delar av en karta
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 snackar vi!"

"Jag är glad att du gillade det."