CodeGym /Java блог /Случаен /Как да итерирате карта в Java
John Squirrels
Ниво
San Francisco

Как да итерирате карта в Java

Публикувано в групата
В тази публикация ще научим различни начини за повторение на карта в Java. Някои от често срещаните му начини и How да ги използвате с помощта на примери. Преди да започнете, предполагаме, че разбирате интерфейси и карти в Java. Ето обаче кратко резюме за вас.

Какво е карта в Java?

Има много интерпретации на това, но нека го кажем просто така.
„Map е интерфейс в Java, който се използва за съхраняване на данни под формата на двойки ключ-стойност.“
Ако мислите за Howво се използват картите? Или кога са необходими? Тогава има много ситуации в реалния живот, когато трябва да съхраняваме данни в двойки ключ-стойност. Например, всички думи, съответстващи на една буква в речника, могат да бъдат съхранени под формата на карта в Java.
К Хвърчило, Крал, Корея, Рицар,... и т.н.
Л Лава, Живот, Светлина, Любов, Ливан,... и т.н.
Освен това можете да разгледате следните примери, за да разберете това по-добре.
Ключ Стойност
Семеен ID Членове на семейството
Име на класа Студентски книжки
Име на област Пощенски codeове
Районен блок Номера на къщи

Защо трябва да итерираме през карта?

Трябва да обходим or итерираме карта за достъп, модифициране or премахване на данни. Нека проучим някои от възможностите, които имаме.

Кои са някои често срещани начини за повторение на карта в Java?

Въпреки че има много начини да преминете през карта. Ние обаче ще се съсредоточим върху най-ефективните и прости начини.
  1. Методът ForEach Loop
  2. Методът на итераторите
Моля, намерете изпълнението на двата метода по-долу.

Използване на метода Foreach Loop

Пример


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

Изход

ключ = 1, стойност = понеделник ключ = 2, стойност = вторник ключ = 3, стойност = сряда ключ = 4, стойност = четвъртък ключ = 5, стойност = петък

Обяснение

В този пример използвахме цикъла foreach за итерация на картата. Използвайки цикъла for-each, получаваме entrySet() , който предоставя автоматизиран „изглед“ на данните в картата под формата на двойки ключ-стойност. Всеки entrySet съдържа ключ и съответните стойности. Където можете да използвате всички методи на Map.Entry<key, value> според вашите изисквания. Тук сме използвали само getKey() и getValue() за показване на данните на конзолата. Като упражнение можете да проучите останалите методи за укрепване на владеенето на тази концепция.

Използване на метода на итераторите

Пример


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

		}
	}
}

Изход

ключ = 11, стойност = ключ за ноември = 1, стойност = ключ за януари = 12, стойност = ключ за декември = 2, стойност = ключ за февруари = 3, стойност = ключ за март = 4, стойност = ключ за април = 5, стойност = ключ за май = 6, стойност = ключ за юни = 7, стойност = ключ за юли = 8, стойност = ключ за август = 9, стойност = ключ за септември = 10, стойност = ключ за октомври

Обяснение

В този пример създаваме явен итератор за преминаване/повтаряне на картата. Първо, трябва да импортирате класа на итератора и след това да получите итератора за entrySet. Сега преминете през картата, докато продължавате да проверявате следващия обект, който съществува на картата. Ето! Вашето преминаване е завършено, точно така.

Цикълът Foreach по-добър ли е от метода на итераторите?

Няма meaning кой метод използвате за обхождане на карта, стига той да върши работата instead of вас. По отношение на производителността, Howто цикълът for-each, така и итераторите имат еднаква времева сложност . Така че никой не е по-добър от другия, зависи от това Howво трябва да използвате и кога.

Каква е разликата между двата метода?

Цикълът for-each не позволява актуализиране/модифициране на данните в картата. Напротив, можете лесно да променяте данни с помощта на итератори. Класът итератори ви улеснява, като предоставя внедряване за редактиране/премахване на данните в картата. Обратно, ако се опитате да редактирате/изтриете картографски данни с помощта на цикъла for-each, това ще изведе ConcurrentModificationException . Причината за това е, че цикълът for-each имплицитно създава итератор, който не е изложен на потребителя. Следователно нямате достъп да променяте or изтривате данни.

Кой метод на преминаване да използвам и кога?

Ако не сте сигурни дали да използвате for-each or итераторите, за да итерирате вашата карта, тогава можете да приемете следните предложения.
  • Използвайте итератора , ако трябва да промените картата.
  • Използвайте цикъла for-each , ако имате вложени цикли (за да избегнете сложност).

Заключение

До края на публикацията се надяваме, че сте научor How да итерирате map в Java. Насърчаваме ви да практикувате тези и да изпробвате и други методи за преминаване. Чувствайте се свободни да се връщате назад or да задавате въпроси, когато се почувствате блокирани. Дотогава, приятно учене!
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION