CodeGym /Java blogg /Slumpmässig /Hur man itererar en karta i Java
John Squirrels
Nivå
San Francisco

Hur man itererar en karta i Java

Publicerad i gruppen
I det här inlägget kommer vi att lära oss olika sätt att iterera en karta i Java. Några av dess vanliga sätt och hur man använder dem med hjälp av exempel. Innan du börjar antar vi att du förstår gränssnitt och kartor i Java. Men här är en snabb sammanfattning för dig.

Vad är en karta i Java?

Det finns många tolkningar av detta, men låt oss enkelt uttrycka det så här.
"Map är ett gränssnitt i Java, som används för att lagra data i form av nyckel-värdepar."
Om du funderar på vad används kartor till? Eller när behövs de? Sedan finns det många situationer i verkliga livet när vi behöver lagra data i nyckel-värdepar. Till exempel kan alla ord som motsvarar en enda bokstav i en ordbok lagras i form av en karta i Java.
K Drake, kung, Korea, riddare,..., etc.
L Lava, liv, ljus, kärlek, Libanon,..., etc.
Dessutom kan du ta en titt på följande exempel för att förstå detta bättre.
Nyckel Värde
Familje-ID Familjemedlemmar
Klassnamn Student-ID
Områdesnamn Postnummer
Area Block Husnummer

Varför behöver vi iterera genom en karta?

Vi måste korsa eller iterera över en karta för att komma åt, ändra eller ta bort data. Låt oss utforska några av alternativen vi har.

Vilka är några vanliga sätt att iterera en karta i Java?

Även om det finns många sätt att gå igenom en karta. Vi kommer dock att fokusera på de mest effektiva och enkla sätten.
  1. Metoden ForEach Loop
  2. Iterators-metoden
Vänligen se implementeringen av båda metoderna nedan.

Använder metoden Foreach Loop

Exempel


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

nyckel = 1, värde = måndagsnyckel = 2, värde = tisdagsnyckel = 3, värde = onsdagsnyckel = 4, värde = torsdagsnyckel = 5, värde = fredag

Förklaring

I det här exemplet använde vi foreach loop för att iterera över kartan. Genom att använda for-each loop får vi en entrySet() som ger en automatiserad "vy" av data i kartan, i form av nyckel-värdepar. Varje entrySet innehåller en nyckel och motsvarande värden. Där du kan använda alla metoder för Map.Entry<nyckel, värde> enligt dina krav. Här har vi bara använt getKey() och getValue() för att visa data på konsolen. Som en övning kan du utforska resten av metoderna för att stärka ditt kommando på detta koncept.

Använder Iterators-metoden

Exempel


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

nyckel = 11, värde = novembernyckel = 1, värde = januarinyckel = 12, värde = decembernyckel = 2, värde = februarinyckel = 3, värde = marsnyckel = 4, värde = aprilnyckel = 5, värde = majnyckel = 6, värde = juninyckel = 7, värde = julinyckel = 8, värde = augustinyckel = 9, värde = septembernyckel = 10, värde = oktober

Förklaring

I det här exemplet skapar vi explicit iterator för att korsa / iterera över kartan. Först måste du importera iteratorklassen och sedan hämta iteratorn för entrySet. Gå nu igenom kartan samtidigt som du fortsätter att kontrollera nästa enhet som finns på kartan. Varsågod! Din genomgång är komplett, precis som det.

Är Foreach-loopen bättre än iteratormetoden?

Det spelar ingen roll vilken metod du använder för att korsa en karta så länge den gör jobbet åt dig. När det gäller prestanda har både för varje slinga och iteratorerna samma tidskomplexitet . Så ingen är bättre än den andra, det beror på vad du behöver använda och när.

Vad är skillnaden mellan de två metoderna?

För varje loop tillåter inte att uppdatera/modifiera data i kartan. Tvärtom kan du enkelt ändra data med iteratorer. Iteratorklassen underlättar dig genom att tillhandahålla implementering för att redigera/ta bort data i kartan. Om du däremot försöker redigera/ta bort kartdata med hjälp av for-each loop, kommer det att skapa en ConcurrentModificationException . Anledningen till detta är att för varje loop implicit skapar en iterator, som inte exponeras för användaren. Därför har du inte åtkomst att ändra eller radera någon data.

Vilken genomgångsmetod ska man använda och när?

Om du inte är säker på om du ska använda for-each eller iteratorerna för att iterera din karta, kan du ta följande förslag.
  • Använd iteratorn om du måste ändra kartan.
  • Använd för varje loop om du har kapslade loopar (för att undvika komplexitet).

Slutsats

I slutet av inlägget hoppas vi att du har lärt dig hur man itererar kartor i Java. Du uppmuntras att öva på dessa och även prova andra metoder för traversering. Hoppa gärna tillbaka eller ställ frågor när du känner dig fast. Tills dess, lycka till med lärandet!
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION