I dette indlæg vil vi lære forskellige måder at iterere et kort på i Java. Nogle af dens almindelige måder, og hvordan man bruger dem ved hjælp af eksempler. Før du går i gang, antager vi, at du forstår
grænseflader og
kort i Java. Men her er en hurtig opsummering til dig.
Hvad er et kort i Java?
Der er mange fortolkninger af dette, men lad os ganske enkelt sige det sådan.
"Kort er en grænseflade i Java, der bruges til at gemme data i form af nøgleværdi-par."
Hvis du tænker på, hvad bruges kort til? Eller hvornår er de nødvendige? Så er der mange situationer i det virkelige liv, hvor vi skal lagre data i nøgleværdi-par. For eksempel kan alle de ord, der svarer til et enkelt bogstav i en ordbog, gemmes i form af et kort i Java.
K |
Drage, Konge, Korea, Ridder,... osv. |
L |
Lava, liv, lys, kærlighed, Libanon,... osv. |
Desuden kan du se på følgende eksempler for at forstå dette bedre.
Nøgle |
Værdi |
Familie ID |
Familie medlemmer |
Klassens navn |
Studie-id'er |
Områdenavn |
Postnummer |
Områdeblok |
Husnumre |
Hvorfor skal vi gentage et kort?
Vi er nødt til at krydse eller iterere over et kort for at få adgang til, ændre eller fjerne data. Lad os undersøge nogle af de muligheder, vi har.
Hvad er nogle almindelige måder at iterere et kort på i Java?
Selvom der er mange måder at krydse et kort på. Vi vil dog fokusere på de mest effektive og enkle måder.
- ForEach Loop-metoden
- Iterator-metoden
Find implementeringen af begge metoder nedenfor.
Brug af 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());
}
}
}
Produktion
tast = 1, værdi = mandagstast = 2, værdi = tirsdagstast = 3, værdi = onsdagstast = 4, værdi = torsdagstast = 5, værdi = fredag
Forklaring
I dette eksempel brugte vi foreach loop til at iterere over kortet. Ved at bruge for-each-løkken får vi en
entrySet() som giver en automatiseret "visning" af dataene i kortet, i form af nøgle-værdi-par. Hvert entrySet indeholder en nøgle og tilsvarende værdier. Hvor du kan bruge alle metoderne til
Map.Entry<key, value> i henhold til dine krav. Her har vi kun brugt
getKey() og
getValue() til at vise dataene på konsollen. Som en øvelse kan du udforske resten af metoderne til at styrke din kommando på dette koncept.
Ved hjælp af 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());
}
}
}
Produktion
nøgle = 11, værdi = november nøgle = 1, værdi = januar nøgle = 12, værdi = december nøgle = 2, værdi = februar nøgle = 3, værdi = marts nøgle = 4, værdi = april nøgle = 5, værdi = maj nøgle = 6, værdi = juninøgle = 7, værdi = julinøgle = 8, værdi = augustnøgle = 9, værdi = septembernøgle = 10, værdi = oktober
Forklaring
I dette eksempel opretter vi eksplicit iterator til at krydse / iterere over kortet. Først skal du importere iteratorklassen og derefter hente iteratoren til entrySet. Gennemse nu kortet, mens du bliver ved med at tjekke den næste enhed, der findes på kortet. Værsgo! Din gennemkøring er fuldendt, bare sådan.
Er Foreach-løkken bedre end iterator-metoden?
Det er ligegyldigt, hvilken metode du bruger til at krydse et kort, så længe det gør jobbet for dig.
Med hensyn til ydeevne har både for-hver sløjfe og iteratorerne samme tidskompleksitet . Så ingen er bedre end den anden, det afhænger af hvad du skal bruge og hvornår.
Hvad er forskellen mellem de to metoder?
For-each-løkken tillader ikke at opdatere/ændre dataene på kortet. Tværtimod kan du nemt ændre data ved hjælp af iteratorer. Iterator-klassen letter dig ved at levere implementering til at redigere/fjerne dataene på kortet. Modsat, hvis du forsøger at redigere/slette kortdata ved hjælp af for-each-løkken, vil det afgive en
ConcurrentModificationException . Grunden til dette er, at for-each-løkken implicit skaber en iterator, som ikke er eksponeret for brugeren. Derfor har du ikke adgang til at ændre eller slette nogen data.
Hvilken gennemløbsmetode skal bruges og hvornår?
Hvis du ikke er sikker på, om du skal bruge for-each eller iteratorerne til at iterere dit kort, så kan du tage følgende forslag.
- Brug iteratoren , hvis du skal ændre kortet.
- Brug for-hver- løkken, hvis du har indlejrede løkker (for at undgå kompleksitet).
Konklusion
Ved slutningen af indlægget håber vi, at du har lært at gentage kort i Java. Du opfordres til at øve dig på disse og også prøve andre gennemkøringsmetoder. Du er velkommen til at hoppe tilbage eller stille spørgsmål, når du føler dig fastlåst. Indtil da, god læring!
GO TO FULL VERSION