"Hei, Amigo."
"Hei, Rishi."
"Ellie fortalte meg at du ville ha flere eksempler på samlinger. Jeg skal gi deg noen. Her er en liste over samlinger og grensesnitt:"
Grensesnitt | Klasse/gjennomføring | Beskrivelse |
---|---|---|
Liste | ArrayList | Liste |
LinkedList | Liste | |
Vektor | Vektor | |
Stable | Stable | |
Sett | HashSet | Sett |
Tresett | Sett | |
SortertSett | Sortert sett | |
Kart | HashMap | Kart/ordbok |
Trekart | Kart/ordbok | |
Sortert kart | Sortert ordbok | |
Hastbar | Hash-tabell |
"Hmm. Det er ganske mye. Fire lister, tre sett og fire kart."
"Ja, de er alle forskjellige implementeringer av grensesnittene List, Set og Map."
"Hva er forskjellen mellom disse implementeringene?"
"Det er akkurat det vi skal snakke om i dag. Bare vær tålmodig."
"Har du andre spørsmål?"
"Jeg vet hvordan jeg viser en liste på skjermen. Hvordan viser jeg et sett eller kart?"
"Elementene i en liste har en fast rekkefølge, så du kan bare bruke en indeks for å vise dem. For et sett eller kart er det ingen spesifikk rekkefølge. Faktisk kan rekkefølgen på elementene endres etter hvert som elementer slettes eller nye elementer legges til."
"Fantastisk."
"Dette er grunnen til at spesielle objekter, kalt iteratorer , ble oppfunnet for å jobbe med samlingselementer. De lar deg gå gjennom alle elementene i en samling, selv om de bare har navn i stedet for indekser (Kart), eller verken navn eller indekser ( Sett)."
"Her er noen 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 lurer på hva alt det betyr."
"Det er faktisk ganske enkelt. Først får vi et spesielt objekt, en iterator, fra samlingen. Iteratoren har bare to metoder.
1. Next()-metoden returnerer det neste elementet i samlingen.
2. HasNext()-metoden sjekker om det fortsatt er elementer som ikke har blitt returnert av next()."
"OK. Jeg tror det blir klarere nå. La meg prøve å gjenta det jeg forsto."
"Så... Først må vi kalle iterator()-metoden på en samling for å få dette magiske iteratorobjektet."
"Så får vi elementer ett og ett så lenge det er noen igjen å hente. Vi får det neste elementet i samlingen ved å kalle next(), og vi sjekker om det fortsatt er elementer i samlingen ved å kalle hasNext() på iterator. Er det riktig?"
"Ja, mer eller mindre. Men vent på den gode delen."
"Java har stenografi for å arbeide med iteratorer. Etter mønsteret for while og for , er det lagt til en spesiell setning til: for hver . Den er også indikert med nøkkelordet for ."
"For-each-setningen brukes bare for å jobbe med samlinger og beholdere. Den bruker en iterator implisitt, men vi ser bare det returnerte elementet."
"La meg vise deg longhand- og stenografimåtene å jobbe 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);
}
}
"Merk at ordene uthevet i rødt eller grønt er fraværende i høyre del. Faktisk er tre linjer erstattet med en:"
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
String text = iterator.next();
for (String text : set)
"Dette ser nydelig ut. Jeg liker det mye bedre på denne måten."
"La oss se på stenografien av eksemplene 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);
}
}
"Nå snakker du!"
"Jeg er glad du likte det."
GO TO FULL VERSION