CodeGym /Java 博客 /随机的 /如何在 Java 中迭代一个 Map
John Squirrels
第 41 级
San Francisco

如何在 Java 中迭代一个 Map

已在 随机的 群组中发布
在这篇文章中,我们将学习在 Java 中迭代 Map 的不同方法。它的一些常用方法以及如何在示例的帮助下使用这些方法。在开始之前,我们假设您了解Java 中的接口映射。但是,这里有一个快速回顾。

什么是 Java 中的地图?

对此有多种解释,我们就简单的这么说吧。
“Map是Java中的一个接口,用于以键值对的形式存储数据。”
如果您正在考虑地图的用途是什么?或者什么时候需要它们?那么在现实生活中有很多情况我们需要以键值对的形式存储数据。例如,字典中单个字母对应的所有单词在Java中都可以以映射的形式存储。
风筝,国王,韩国,骑士,...等
大号 熔岩、生命、光、爱、黎巴嫩……等等。
此外,您可以查看以下示例以更好地理解这一点。
钥匙 价值
家庭身份证 家庭成员
班级名称 学生证
区域名称 邮政编码
区域块 房屋号码

为什么我们需要遍历 Map?

我们需要遍历或迭代地图以访问、修改或删除数据。让我们探讨一下我们拥有的一些选项。

在 Java 中迭代 Map 有哪些常见方法?

虽然有很多方法可以遍历地图。但是,我们将专注于最有效和最简单的方法。
  1. ForEach 循环方法
  2. 迭代器方法
请在下面找到这两种方法的实现。

使用 Foreach 循环方法

例子


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,值 = 11 月键 = 1,值 = 1 月键 = 12,值 = 12 月键 = 2,值 = 2 月键 = 3,值 = 3 月键 = 4,值 = 4 月键 = 5,值 = 5 月键= 6,值 = 6 月键 = 7,值 = 7 月键 = 8,值 = 8 月键 = 9,值 = 9 月键 = 10,值 = 10 月

解释

在此示例中,我们创建显式迭代器来遍历/迭代地图。首先需要导入迭代器类,然后获取entrySet的迭代器。现在遍历地图,同时继续检查地图上存在的下一个实体。给你!你的遍历就这样完成了。

Foreach 循环是否比迭代器方法更好?

使用哪种方法遍历地图并不重要,只要它能为您完成工作即可。在性能方面,for-each 循环和迭代器具有相同的时间复杂度。所以没有一个比另一个更好,这取决于您需要使用什么以及何时使用。

这两种方法有什么区别?

for-each 循环不允许更新/修改地图中的数据。相反,您可以使用迭代器轻松修改数据。迭代器类通过提供实现来编辑/删除地图中的数据来为您提供便利。相反,如果您尝试使用 for-each 循环编辑/删除地图数据,它将抛出ConcurrentModificationException。这样做的原因是 for-each 循环隐式创建了一个迭代器,它不会暴露给用户。因此,您无权修改或删除任何数据。

什么时候使用哪种遍历方法?

如果您不确定是使用 for-each 还是迭代器来迭代您的地图,那么您可以采用以下建议。
  • 如果必须修改地图,请使用迭代器。
  • 如果您有嵌套循环,请使用for-each循环(以避免复杂性)。

结论

到文章结尾时,我们希望您已经学会了如何在 Java 中迭代地图。我们鼓励您练习这些并尝试其他遍历方法。每当您感到困难时,请随时跳回去或发帖提问。到那时,祝您学习愉快!
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION