如何在 Java 中迭代 HashMap?

javaobject oriented programmingprogramming

(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。


相关文章