如何在 Java 中迭代 HashMap?
Java HashMap 集合使用 (键,值) 对来存储数据。尽管它是非同步的,但它与 HashTable 相比。因此,多个线程可以访问 HashMap 而不遇到任何问题。尽管 HashMap 允许存储空键,但最多只能有一个空键对象和无限多个空值。关于映射的顺序,此类不提供任何保证。
键用于索引值。我们可以使用 HashMap 存储唯一的键。如果我们尝试插入一个重复的键,则相应键的元素将被替换。
不要忘记我们应该导入 java.util.HashMap 包才能使用 HashMap。
使用的方法
您可以使用四种主要方法来迭代 HashMap:
在迭代器的帮助下迭代 HashMap EntrySet。
在 for-each 循环和 lambda 的帮助下迭代 HashMap
使用迭代器迭代 HashMap KeySet。
使用 Stream API 遍历 HashMap。
方法 1:在迭代器的帮助下迭代 HashMap EntrySet
在这里,我们将使用 getValue() 和 getKey() 函数来迭代 HashMap。这是一个示例实现。
entryset()
我们在这里探讨的代码首先创建一个 HashMap,然后向其中提供一些键值对。随后,我们使用 for 循环中的 entrySet() 方法遍历 HashMap
算法
步骤 1 - 导入所需的 Java 实用程序类。
步骤 2 - 声明一个名为 Tutorialspoint 的公共类。
步骤 3 - 使用 String[] args 参数定义 main 方法。
步骤 4 - 创建一个名为 foodTable 的 HashMap 类的新实例,其键和值类型为 String。
步骤 5 - 使用 put 方法向 foodTable 添加元素。
步骤 6 - 启动一个循环,使用 entrySet 方法迭代 foodTable 中的条目。
步骤 7 - 在每次迭代中,使用 set 变量检索当前条目。
步骤 8 - 使用 System.out.println 打印当前条目的键值对。
步骤 9 - 结束循环、main 方法和 Tutorialspoint 类。
示例
import java.util.HashMap; import java.util.Map; public class Tutorialspoint{ public static void main(String[] args){ Map<String, String> foodTable = new HashMap<String, String>(); // Incorporating elements to the adobe HashMap foodTable.put("C", "C Language"); foodTable.put("R", "Ruby"); foodTable.put("J", "Java"); foodTable.put("P", "PHP"); // Iterating HashMap through for loop for (Map.Entry<String, String> set : foodTable.entrySet()) { System.out.println(set.getKey() + " -> " + set.getValue()); } } }
输出
P -> PHP R -> Ruby C -> C Language J -> Java
方法 2:在 for-each 循环和 Lambda 的帮助下迭代 HashMap
我们在此方法中使用 lambda 表达式,这些表达式自 Java 8 版以来即可使用。lambda 表达式对其输入参数的操作会产生一个值。无需将每个键值对转换为条目集即可使用 lambda 表达式解决此问题。
forEach()
此程序导入所需的 Java 实用程序类,构建一个名为“map”的 HashMap 对象,用键值对添加它,然后使用 forEach() 函数迭代它。它在每次迭代中显示公司名称和相应的净资产。
算法
步骤 1 - 通过导入所需的 Java 实用程序类(Map 和 HashMap)来开始程序执行。
步骤 2 - 创建一个名为“IterationInstance”的类。
步骤 3 - 在“IterationInstance”类中,定义“main”方法。
步骤 4 - 创建一个名为“map”的新 HashMap 对象,以保存组织名称及其各自的净资产值。
步骤 5 - 现在,您可以使用“put”方法将条目合并到映射中。
步骤 6 - 使用“forEach”方法迭代映射中的条目。
步骤 7 - 在 lambda 表达式中,定义要对每个条目执行的行为:打印组织名称及其净资产。
步骤 8 - 执行 lambda 表达式,打印映射中每个条目的公司名称和净资产。
步骤 9 - 结束程序执行。
示例
import java.util.Map; import java.util.HashMap; public class IterationInstance { public static void main(String[] arg) { Map<String,String> map = new HashMap<String,String>(); map.put("Amazon", "$468 billion"); map.put("Apple", "$2.5 trillion"); //iteration over map with the help of forEach() method map.forEach((k,v) -> System.out.println("Company Name: "+ k + ", Net Value is: " + v)); } }
输出
Company Name: Apple, Net Value is: $2.5 trillion Company Name: Amazon, Net Value is: $468 billion
方法 3:使用迭代器迭代 HashMap KeySet
这次,可以使用迭代器。由于 HashMap.entrySet() 提供了一个扩展 Collection 接口的集合,因此我们也可以使用使用 Map.entrySet().iterator 生成的 Iterator 实例。
While()
该代码创建一个 HashMap 对象并向其中提供键值对。然后,它遍历 HashMap 并打印每个对的键和值。
算法
步骤 1 - 从 Java 实用程序库导入必要的类。
步骤 2 - 然后,代码创建一个名为 intType 的 HashMap 对象,以存储整数键和字符串值。
步骤 3 - 代码使用 put() 方法向 HashMap 添加键值对。
步骤 4 - 然后,它通过在 HashMap 上调用 entrySet().iterator() 方法创建一个迭代器。
步骤 5 - 代码使用 while 循环和迭代器的 hasNext() 方法遍历 HashMap。
步骤 6 - 它使用迭代器的 next() 方法接收下一个 HashMap 条目。
步骤 7 - 此代码然后使用 Map.Entry 对象的 getKey() 和 getValue() 方法检索每个条目的键和值。
步骤 8 - 此代码然后使用 System.out.println() 方法打印键和值。
步骤 9 - 现在,重复步骤 5-8,直到 HashMap 中没有其他条目。
示例
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class TLP { // Main driver method public static void main(String[] arguments){ // Generating Hash map Map<Integer, String> intType = new HashMap<Integer, String>(); // Incorporate data(Key-value pairs) into hashmap intType.put(11, "Eleven"); intType.put(12, "Twelve"); intType.put(13, "Thirteen"); intType.put(14, "Fourteen"); // Iterator Iterator<Entry<Integer, String> > new_Iterator = intType.entrySet().iterator(); while (new_Iterator.hasNext()) { Map.Entry<Integer, String> new_Map = (Map.Entry<Integer, String>) new_Iterator.next(); System.out.println(new_Map.getKey() + " = " + new_Map.getValue()); } } }
输出
11 = Eleven 12 = Twelve 13 = Thirteen 14 = Fourteen
方法 4:利用 Stream API 迭代 HashMap
流 API 是处理项目集合的有效工具。它允许我们在不更改原始数据结构的情况下对数据执行操作。
entrySet().stream()
该代码创建一个 HashMap 以存储整数键和相应的字符串值。然后,它向映射中添加四个键值对,并使用流和 forEach 打印映射中的每个键值对。输出显示键及其相应的值。
算法
步骤 1 - 创建一个名为 intType 的 HashMap 以保存整数键和相应的字符串值。
步骤 2 - 将键值对添加到 intType HashMap
步骤 3 - 使用 entrySet() 函数迭代 intType HashMap 中的每个条目,即键值对。
步骤 4 - 对于每个条目,显示键及其相应的值。
步骤 5 - 最后,终止代码。
示例
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class TLP { public static void main(String[] arguments){ Map<Integer, String> intType = new HashMap<Integer, String>(); intType.put(1, "Apple"); intType.put(2, "Cherry"); intType.put(3, "Banana"); intType.put(4, "Berries"); intType.entrySet().stream().forEach( input -> System.out.println(input.getKey() + " = " + input.getValue()) ); } }
输出
1 = Apple 2 = Cherry 3 = Banana 4 = Berries
结论
在 Java 中遍历 HashMap 是操作键值对时的一项常见任务。Java HashMap 提供了几种迭代技术,例如迭代器、带有 lambda 的 for-each 循环、带有迭代器的键集和流 API。