"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:"
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. 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å:"
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);
}
}
"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:"
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
String text = iterator.next();
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:"
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 taler du!"
"Jeg er glad for at du kunne lide det."
GO TO FULL VERSION