CodeGym /Blog Java /Random-PL /Jak iterować mapę w Javie
Autor
Milan Vucic
Programming Tutor at Codementor.io

Jak iterować mapę w Javie

Opublikowano w grupie Random-PL
W tym poście nauczymy się różnych sposobów iteracji mapy w Javie. Niektóre z jego typowych sposobów i jak z nich korzystać za pomocą przykładów. Zakładamy, że zanim zaczniesz, rozumiesz interfejsy i mapy w Javie. Jednak oto krótkie podsumowanie dla Ciebie.

Co to jest mapa w Javie?

Istnieje wiele interpretacji tego zjawiska, ale ujmijmy to w prosty sposób.
„Map to interfejs w Javie, który służy do przechowywania danych w postaci par klucz-wartość”.
Jeśli zastanawiasz się, do czego służą mapy? Albo kiedy są potrzebne? Następnie w prawdziwym życiu jest wiele sytuacji, w których musimy przechowywać dane w parach klucz-wartość. Na przykład wszystkie słowa odpowiadające pojedynczej literze w słowniku mogą być przechowywane w postaci mapy w Javie.
k Latawiec, Król, Korea, Rycerz, ... itd.
Ł Lawa, życie, światło, miłość, Liban,... itd.
Co więcej, możesz rzucić okiem na poniższe przykłady, aby lepiej to zrozumieć.
Klucz Wartość
Identyfikator rodziny Członkowie rodziny
Nazwa klasy Legitymacje studenckie
Nazwa obszaru Kody pocztowe
Blok obszarowy Numery domów

Dlaczego musimy iterować po mapie?

Musimy przemierzać lub iterować mapę, aby uzyskać dostęp, zmodyfikować lub usunąć dane. Przyjrzyjmy się niektórym z dostępnych opcji.

Jakie są typowe sposoby iteracji mapy w Javie?

Chociaż istnieje wiele sposobów na przemierzanie mapy. Skupimy się jednak na najbardziej efektywnych i prostych sposobach.
  1. Metoda pętli ForEach
  2. Metoda Iteratorów
Poniżej znajdziesz implementację obu metod.

Korzystanie z metody Foreach Loop

Przykład


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()); 
		}
	}
}

Wyjście

klucz = 1, wartość = poniedziałek klucz = 2, wartość = wtorek klucz = 3, wartość = środa klucz = 4, wartość = czwartek klucz = 5, wartość = piątek

Wyjaśnienie

W tym przykładzie użyliśmy pętli foreach do iteracji po mapie. Korzystając z pętli for-each, otrzymujemy metodę entrySet() , która zapewnia zautomatyzowany „podgląd” danych na mapie w postaci par klucz-wartość. Każdy zestaw wpisów zawiera klucz i odpowiadające mu wartości. Gdzie możesz użyć wszystkich metod Map.Entry<klucz, wartość> zgodnie ze swoimi wymaganiami. Tutaj użyliśmy tylko metod getKey() i getValue() do wyświetlenia danych na konsoli. W ramach ćwiczenia możesz zapoznać się z pozostałymi metodami, aby wzmocnić swoją kontrolę nad tą koncepcją.

Korzystanie z metody Iterators

Przykład


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());

		}
	}
}

Wyjście

klucz = 11, wartość = listopad klucz = 1, wartość = styczeń klucz = 12, wartość = grudzień klucz = 2, wartość = luty klucz = 3, wartość = marzec klucz = 4, wartość = kwiecień klucz = 5, wartość = maj klucz = 6, wartość = czerwiec klucz = 7, wartość = lipiec klucz = 8, wartość = sierpień klucz = 9, wartość = wrzesień klucz = 10, wartość = październik

Wyjaśnienie

W tym przykładzie tworzymy jawny iterator do przechodzenia/iterowania po mapie. Najpierw musisz zaimportować klasę iteratora, a następnie pobrać iterator dla EntrySet. Teraz przemierzaj mapę, cały czas sprawdzając następny byt, który istnieje na mapie. Proszę bardzo! Twoja podróż jest zakończona, tak po prostu.

Czy pętla Foreach jest lepsza niż metoda iteratorów?

Nie ma znaczenia, jakiej metody użyjesz do przemierzania mapy, o ile wykona to zadanie za Ciebie. Pod względem wydajności zarówno pętla for-each, jak i iteratory mają taką samą złożoność czasową . Więc żaden nie jest lepszy od drugiego, zależy to od tego, czego potrzebujesz i kiedy.

Jaka jest różnica między tymi dwiema metodami?

Pętla for-each nie pozwala na aktualizację/modyfikację danych na mapie. Wręcz przeciwnie, możesz łatwo modyfikować dane za pomocą iteratorów. Klasa iterators ułatwia Ci implementację edycji/usuwania danych na mapie. Przeciwnie, jeśli spróbujesz edytować/usunąć dane mapy za pomocą pętli for-each, wyrzuci to wyjątek ConcurrentModificationException . Powodem tego jest to, że pętla for-each niejawnie tworzy iterator, który nie jest widoczny dla użytkownika. W związku z tym nie masz dostępu do modyfikowania ani usuwania żadnych danych.

Którą metodę przechodzenia stosować i kiedy?

Jeśli nie masz pewności, czy użyć iteratorów for-e, czy iteratorów do iteracji mapy, możesz skorzystać z poniższych sugestii.
  • Użyj iteratora , jeśli musisz zmodyfikować mapę.
  • Użyj pętli for-each , jeśli masz zagnieżdżone pętle (aby uniknąć złożoności).

Wniosek

Mamy nadzieję, że pod koniec postu nauczyłeś się iterować mapę w Javie. Zachęcamy do ich przećwiczenia i wypróbowania innych metod przemierzania. Możesz wrócić lub zadać pytanie, gdy poczujesz, że utknąłeś. Do tego czasu miłej nauki!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION