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.
- Metoda pętli ForEach
- 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!
GO TO FULL VERSION