I dette innlegget vil vi lære forskjellige måter å iterere et kart på i Java. Noen av de vanlige måtene og hvordan du bruker dem ved hjelp av eksempler. Før du begynner, antar vi at du forstår
grensesnitt og
kart i Java. Men her er en rask oppsummering for deg.
Hva er et kart i Java?
Det er mange tolkninger av dette, men la oss enkelt si det slik.
"Map er et grensesnitt i Java, som brukes til å lagre data i form av nøkkelverdi-par."
Hvis du tenker på hva brukes kart til? Eller når trengs de? Så er det mange situasjoner i det virkelige liv når vi trenger å lagre data i nøkkelverdi-par. For eksempel kan alle ordene som tilsvarer en enkelt bokstav i en ordbok lagres i form av et kart i Java.
K |
Drage, konge, Korea, ridder,..., etc. |
L |
Lava, liv, lys, kjærlighet, Libanon,..., etc. |
Dessuten kan du ta en titt på følgende eksempler for å forstå dette bedre.
Nøkkel |
Verdi |
Familie-ID |
Familiemedlemmer |
Klassenavn |
Student-ID |
Områdenavn |
Postnummer |
Områdeblokk |
Husnummer |
Hvorfor må vi iterere gjennom et kart?
Vi må krysse eller iterere over et kart for å få tilgang til, endre eller fjerne data. La oss utforske noen av alternativene vi har.
Hva er noen vanlige måter å iterere et kart på i Java?
Selv om det er mange måter å krysse et kart på. Vi vil imidlertid fokusere på de mest effektive og enkle måtene.
- ForEach Loop-metoden
- Iterators-metoden
Vennligst finn implementeringen av begge metodene nedenfor.
Bruke Foreach Loop-metoden
Eksempel
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>();
// store business days i-e; key/value pairs in the Map
businessDays.put("1", "Monday");
businessDays.put("2", "Tuesday");
businessDays.put("3", "Wednesday");
businessDays.put("4", "Thursday");
businessDays.put("5", "Friday");
// Iterating over the Map.entrySet() using map.forEach
for (Map.Entry<String, String> entry : businessDays.entrySet())
{
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
}
}
Produksjon
nøkkel = 1, verdi = mandagstast = 2, verdi = tirsdagstast = 3, verdi = onsdagstast = 4, verdi = torsdagstast = 5, verdi = fredag
Forklaring
I dette eksemplet brukte vi foreach loop til å iterere over kartet. Ved å bruke for-each-løkken får vi en
entrySet() som gir en automatisert "visning" av dataene i kartet, i form av nøkkelverdi-par. Hvert oppføringssett inneholder en nøkkel og tilsvarende verdier. Hvor du kan bruke alle metodene til
Map.Entry<key, value> i henhold til dine krav. Her har vi kun brukt
getKey() og
getValue() for å vise dataene på konsollen. Som en øvelse kan du utforske resten av metodene for å styrke kommandoen din på dette konseptet.
Ved hjelp av Iterators-metoden
Eksempel
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>();
// store business days i-e; key/value pairs in the Map
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");
// iterate map / traverse the map using using iterator
Iterator<Map.Entry<String, String>> iterator = monthsInAYear.entrySet().iterator();
while (iterator.hasNext())
{
// check if next entry exists in the map
Map.Entry<String, String> entry = iterator.next();
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
}
}
Produksjon
nøkkel = 11, verdi = novembernøkkel = 1, verdi = januarnøkkel = 12, verdi = desembernøkkel = 2, verdi = februarnøkkel = 3, verdi = marsnøkkel = 4, verdi = aprilnøkkel = 5, verdi = mainøkkel = 6, verdi = juninøkkel = 7, verdi = julinøkkel = 8, verdi = augustnøkkel = 9, verdi = septembernøkkel = 10, verdi = oktober
Forklaring
I dette eksemplet lager vi eksplisitt iterator for å krysse / iterere over kartet. Først må du importere iteratorklassen, og deretter hente iteratoren for oppføringSet. Gå nå gjennom kartet mens du fortsetter å sjekke den neste enheten som finnes på kartet. Der går du! Traverseringen din er fullført, akkurat som det.
Er Foreach-løkken bedre enn iterator-metoden?
Det spiller ingen rolle hvilken metode du bruker for å krysse et kart så lenge det gjør jobben for deg.
Når det gjelder ytelse, har både for hver sløyfe og iteratorene samme tidskompleksitet . Så ingen er bedre enn den andre, det avhenger av hva du trenger å bruke og når.
Hva er forskjellen mellom de to metodene?
For-hver-løkken tillater ikke å oppdatere/endre dataene i kartet. Tvert imot kan du enkelt endre data ved å bruke iteratorer. Iteratorklassen forenkler deg ved å gi implementering for å redigere/fjerne dataene i kartet. Motsatt, hvis du prøver å redigere/slette kartdata ved å bruke for-each loop, vil det gi en
ConcurrentModificationException . Grunnen til dette er at for-hver-løkken implisitt skaper en iterator, som ikke er eksponert for brukeren. Derfor har du ikke tilgang til å endre eller slette data.
Hvilken traverseringsmetode skal brukes og når?
Hvis du ikke er sikker på om du skal bruke for-hver eller iteratorene for å iterere kartet ditt, kan du ta følgende forslag.
- Bruk iteratoren hvis du må endre kartet.
- Bruk for-hver- løkken hvis du har nestede løkker (for å unngå kompleksitet).
Konklusjon
På slutten av innlegget håper vi du har lært hvordan du kan iterere kart i Java. Du oppfordres til å øve på disse og prøve ut andre traverseringsmetoder også. Føl deg fri til å hoppe tilbake eller legg ut spørsmål når du føler deg fast. Inntil da, god læring!
GO TO FULL VERSION