如何在 Java 中迭代 HashMap?
(Key, Value) 对用于在 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,然后为其提供一些键值对。随后,我们通过 HashMap 在 for 循环中迭代 entrySet() 方法的使用
算法
步骤 1 - 导入所需的 Java 实用程序类。
步骤 2 - 声明一个名为 Tutorialspoint 的公共类。
步骤 3 - 使用 String[] args 参数定义 main 方法。
步骤 4 - 创建一个名为 foodTable 的 HashMap 类的新实例,其键和值类型为 String。
步骤 5 - 使用 put 方法向 foodTable 添加元素。
步骤 6 - 使用 entrySet 方法启动循环以迭代 foodTable 中的条目。
步骤 7 - 在每次迭代中,使用设置变量检索当前条目。
步骤 8 - 使用 System.out.println 打印当前条目的键值对。
步骤 9 - 结束循环、主方法和 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>(); // 将元素合并到 adobe HashMap foodTable.put("C", "C Language"); foodTable.put("R", "Ruby"); foodTable.put("J", "Java"); foodTable.put("P", "PHP"); // 通过 for 循环迭代 HashMap 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"); //借助 forEach() 方法对 map 进行迭代 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:使用 Iterator 遍历 HashMap KeySet
这次可以使用迭代器。我们还可以使用通过 Map.entrySet().iterator 生成的 Iterator 实例,因为 HashMap.entrySet() 提供了一个集合,它扩展了 Collection 接口。
While()
代码创建一个 HashMap 对象并为其提供键值对。然后,它遍历 HashMap 并打印每对的键和值。
算法
步骤 1 - 从 Java 实用程序库导入必要的类。
步骤 2 - 然后,代码创建一个名为 intType 的 HashMap 对象来存储整数键和字符串值。
步骤 3 - 代码使用 put() 方法将键值对添加到 HashMap。
步骤 4 - 然后,它通过调用 HashMap 上的 entrySet().iterator() 方法创建一个迭代器。
步骤 5 - 代码使用 while 循环和迭代器。
步骤 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){ // 生成哈希映射 Map<Integer, String> intType = new HashMap<Integer, String>(); // 将数据(键值对)合并到哈希映射中 intType.put(11, "Eleven"); intType.put(12, "Twelve"); intType.put(13, "Thirteen"); intType.put(14, "Fourteen"); // 迭代器 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
Stream API 是处理项目集合的有效工具。它允许我们在不改变原始数据结构的情况下对数据执行操作。
entrySet().stream()
代码创建一个 HashMap 来存储整数键和相应的字符串值。然后,它将四个键值对添加到映射中,并使用 stream 和 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。