"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:"
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
// Get an iterator for the set
Iterator<String> 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);
}
}
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("Rain");
list.add("In");
list.add("Spain");
Iterator<String> 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);
}
}
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:"
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
String text = iterator.next();
System.out.println(text);
}
}
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
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:"
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
String text = iterator.next();
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:"
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
set.add("Rain");
set.add("In");
set.add("Spain");
for (String text : set)
{
System.out.println(text);
}
}
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("Rain");
list.add("In");
list.add("Spain");
for (String text : list)
{
System.out.println(text);
}
}
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."
GO TO FULL VERSION