In dit bericht leren we verschillende manieren om een kaart in Java te herhalen. Enkele van de gebruikelijke manieren en hoe u deze kunt gebruiken met behulp van voorbeelden.
Voordat we aan de slag gaan, gaan we ervan uit dat u de interfaces en
kaarten in Java begrijpt . Hier is echter een korte samenvatting voor u.
Wat is een kaart op Java?
Hier zijn veel interpretaties van, maar laten we het simpel zeggen.
"Map is een interface in Java, die wordt gebruikt om gegevens op te slaan in de vorm van sleutel-waardeparen."
Als je nadenkt over waar worden kaarten voor gebruikt? Of wanneer zijn ze nodig? Dan zijn er in het echte leven veel situaties waarin we gegevens in sleutel-waardeparen moeten opslaan. Alle woorden die overeenkomen met een enkele letter in een woordenboek kunnen bijvoorbeeld worden opgeslagen in de vorm van een kaart in Java.
K |
Vlieger, Koning, Korea, Ridder,..., enz. |
L |
Lava, Leven, Licht, Liefde, Libanon,..., enz. |
Bovendien kunt u de volgende voorbeelden bekijken om dit beter te begrijpen.
Sleutel |
Waarde |
Gezins-ID |
Familieleden |
Naam van de klasse |
Studenten ID's |
Gebiedsnaam |
Postcodes |
Gebied Blok |
Huisnummers |
Waarom moeten we een kaart herhalen?
We moeten een kaart doorlopen of herhalen om gegevens te openen, te wijzigen of te verwijderen. Laten we eens kijken naar enkele van de opties die we hebben.
Wat zijn enkele gebruikelijke manieren om een kaart in Java te herhalen?
Hoewel er veel manieren zijn om een kaart te doorkruisen. We zullen ons echter concentreren op de meest efficiënte en eenvoudige manieren.
- De ForEach Loop-methode
- De Iterators-methode
Hieronder vindt u de implementatie van beide methoden.
De Foreach Loop-methode gebruiken
Voorbeeld
import java.util.Map;
import java.util.HashMap;
public class ForEachDemo {
public static void main(String[] args) {
Map<String, String> businessDays = new HashMap<String, String>();
businessDays.put("1", "Monday");
businessDays.put("2", "Tuesday");
businessDays.put("3", "Wednesday");
businessDays.put("4", "Thursday");
businessDays.put("5", "Friday");
for (Map.Entry<String, String> entry : businessDays.entrySet())
{
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
}
}
Uitgang
sleutel = 1, waarde = maandag sleutel = 2, waarde = dinsdag sleutel = 3, waarde = woensdag sleutel = 4, waarde = donderdag sleutel = 5, waarde = vrijdag
Uitleg
In dit voorbeeld hebben we de foreach-lus gebruikt om de kaart te herhalen. Door de for-each-lus te gebruiken, krijgen we een
entrySet() die een geautomatiseerde "weergave" van de gegevens op de kaart biedt, in de vorm van sleutel-waardeparen. Elke entrySet bevat een sleutel en bijbehorende waarden. Waar u alle methoden van
Map.Entry<key, value> kunt gebruiken volgens uw vereisten. Hier hebben we alleen
getKey() en
getValue() gebruikt om de gegevens op de console weer te geven. Als oefening kun je de rest van de methoden verkennen om je beheersing van dit concept te versterken.
Met behulp van de Iterators-methode
Voorbeeld
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class MapIterator {
public static void main(String[] args) {
Map<String, String> monthsInAYear = new HashMap<String, String>();
monthsInAYear.put("1", "January");
monthsInAYear.put("2", "February");
monthsInAYear.put("3", "March");
monthsInAYear.put("4", "April");
monthsInAYear.put("5", "May");
monthsInAYear.put("6", "June");
monthsInAYear.put("7", "July");
monthsInAYear.put("8", "August");
monthsInAYear.put("9", "September");
monthsInAYear.put("10", "October");
monthsInAYear.put("11", "November");
monthsInAYear.put("12", "December");
Iterator<Map.Entry<String, String>> iterator = monthsInAYear.entrySet().iterator();
while (iterator.hasNext())
{
Map.Entry<String, String> entry = iterator.next();
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
}
}
Uitgang
sleutel = 11, waarde = november sleutel = 1, waarde = januari sleutel = 12, waarde = december sleutel = 2, waarde = februari sleutel = 3, waarde = maart sleutel = 4, waarde = april sleutel = 5, waarde = mei sleutel = 6, waarde = sleutel juni = 7, waarde = sleutel juli = 8, waarde = sleutel augustus = 9, waarde = sleutel september = 10, waarde = oktober
Uitleg
In dit voorbeeld maken we een expliciete iterator om de kaart te doorkruisen/herhalen. Eerst moet u de iteratorklasse importeren en vervolgens de iterator voor de entrySet ophalen. Doorkruis nu de kaart terwijl je de volgende entiteit op de kaart blijft controleren. Daar ga je! Je reis is zo voltooid.
Is de Foreach-lus beter dan de iterators-methode?
Het maakt niet uit welke methode u gebruikt voor het doorkruisen van een kaart, zolang het maar het werk voor u doet.
Qua prestaties hebben zowel for-each loop als de iterators dezelfde tijdscomplexiteit . De een is dus niet beter dan de ander, het hangt ervan af wat je moet gebruiken en wanneer.
Wat is het verschil tussen de twee methodes?
Met de for-each-lus kunnen de gegevens in de kaart niet worden bijgewerkt/aangepast. Integendeel, u kunt gegevens eenvoudig wijzigen met behulp van iterators. De iterators-klasse vergemakkelijkt u door implementatie te bieden voor het bewerken/verwijderen van de gegevens in de kaart. Als u daarentegen kaartgegevens probeert te bewerken/verwijderen met behulp van de for-each-lus, wordt er een
ConcurrentModificationException gegenereerd . De reden hiervoor is dat de for-elke lus impliciet een iterator creëert, die niet zichtbaar is voor de gebruiker. U hebt dus geen toegang tot het wijzigen of verwijderen van gegevens.
Welke traversalmethode gebruiken en wanneer?
Als u niet zeker weet of u de for-each of de iterators moet gebruiken om uw kaart te herhalen, kunt u de volgende suggesties doen.
- Gebruik de iterator als u de kaart moet wijzigen.
- Gebruik de for-each- lus als u geneste lussen heeft (om complexiteit te voorkomen).
Conclusie
Aan het einde van dit bericht hopen we dat je hebt geleerd hoe je de kaart in Java kunt herhalen. U wordt aangemoedigd om deze te oefenen en ook andere methoden van traversal uit te proberen. Voel je vrij om terug te springen of vragen te stellen wanneer je vastloopt. Tot die tijd, veel leerplezier!