如何在Java中遍历Map

本文概述

  • 迭代器
  • 使用迭代器界面
  • 使用keyset()和value()方法
  • 使用Map.entry < K, V> 方法
  • 迭代键并获取值
  • 使用forEach()方法
在Java中, 可以通过多种方式完成Map的迭代。请记住, 我们不能直接使用迭代器来迭代地图, 因为Map接口不是Collection的一部分。 Java中的所有地图都实现Map接口。 Java中有以下几种类型的地图:
  • 哈希图
  • 树状图
  • LinkedHashMap
映射不是Collection, 但仍然可以在Collections框架下考虑。因此, Map是不扩展Collections接口的接口。
迭代器迭代器是用于对集合进行迭代的接口。它代替了Java Collections Framework中的枚举。迭代器和枚举之间的区别是:
  • 迭代器可以遍历旧元素和非旧元素, 而枚举只能遍历旧元素。
  • 迭代器是快速失败的, 而枚举不是快速失败的。
集合视图
【如何在Java中遍历Map】集合视图方法允许通过以下方式将地图视为集合:
  • keySet:它是Map中包含的一组键。
  • values:它是Map中包含的值的集合。
  • entrySet:它是Map中的一组键/值对。
Map接口还具有一个称为Map.entry的小型嵌套接口。收集视图提供了迭代地图的唯一方法。
使用迭代器界面通过HashMap进行迭代的示例
public static void main(String args[]){HashMap< Integer, String> hm = new HashMap< Integer, String> (); //implements map interfacehm.put(110, "Ravi"); hm.put(120, "Prateek"); hm.put(130, "Davesh"); hm.put(140, "Kamal"); hm.put(150, "Pawan"); Iterator < Integer> it = hm.keySet().iterator(); //keyset is a methodwhile(it.hasNext()){int key=(int)it.next(); System.out.println("Roll no.: "+key+"name: "+hm.get(key)); }}}

输出:
Roll no.: 130name: DaveshRoll no.: 150name: PawanRoll no.: 120name: PrateekRoll no.: 140name: KamalRoll no.: 110name: Ravi

使用keyset()和value()方法keyset():HashMap类的keySet()方法用于对地图中包含的键进行迭代。它返回键的“设置”视图。
句法
Set< K> keyset()

values():HashMap类的values()方法用于对地图中包含的值进行迭代。它返回值的集合视图。
句法
Collection< V> values()


import java.util.Map; import java.util.HashMap; class IterationExample2 { public static void main(String[] arg) { Map< String, String> map = new HashMap< String, String> (); map.put("Gujarat", "Gandhi Nagar"); map.put("Uttar Pradesh", "Lucknow"); map.put("Sikkim", "Ganagtok"); for (String State : map.keySet())//using keyset() method for iteration over keySetSystem.out.println("State: " + State); for (String Capital : map.values())//using values() for iteration over keysSystem.out.println("Capiatl: " + Capital); } }

输出:
State: GujaratState: SikkimState: Uttar PradeshCapital: Gandhi NagarCapital: GanagtokCapital: Lucknow

使用Map.entry < K, V> 方法Map.Entry < K, V> 是一个接口。它返回地图的集合视图, 其元素属于此类。
map.entrySet()方法返回地图中包含的映射的Set视图。地图中的更改也会反映在Set中, 反之亦然。它还支持元素删除, 这会从地图中删除相应的映射。
句法
Set< Map.Entry< K, V> > entrySet()


import java.util.*; class IterationExample3 { public static void main(String[] arg) { Map< String, Float> map = new HashMap< String, Float> (); map.put("Cookies", 90.87f); map.put("Dry Fruits", 434.23f); map.put("Oats", 220.00f); map.put("Chocolate", 70.89f); for (Map.Entry< String, Float> entry : map.entrySet()) //using map.entrySet() for iteration{//returns keys and values respectivelySystem.out.println("Item: " + entry.getKey() + ", Price: " + entry.getValue()); } }}

输出:
Item: Oats, Price: 220.0Item: Dry Fruits, Price: 434.23Item: Cookies, Price: 90.87Item: Chocolate, Price: 70.89

迭代键并获取值例
在下面的示例中, 我们首先遍历键, 然后获取值。
import java.util.*; class IterationExample4 { public static void main(String[] arg) { Map< String, String> map = new HashMap< String, String> (); map.put("Sumit", "Singh"); map.put("Devesh", "Mishra"); map.put("Rahul", "Tiwari"); for (String name: map.keySet())//iteration over keys{//returns the value to which specified key is mappedString lastname=map.get(firstname); System.out.println("Key: " + name + ", Value: " + lastname); } }}

输出:
Key: Rahul, Value: TiwariKey: Devesh, Value: MishraKey: Sumit, Value: Singh

使用forEach()方法ArrayList的forEach()方法用于对Iterable的每个元素执行操作, 直到处理完所有元素为止。
句法
public void forEach(Consumer< ? super E> action)

该方法将动作(每个元素要执行的动作)作为参数。它不返回任何东西。如果指定的操作为null, 则抛出NullPointerException。

在下面的示例中, 我们在forEach()方法中使用lambda表达式来打印地图的每个元素。
import java.util.Map; import java.util.HashMap; class IterationExample5 { public static void main(String[] arg) { Map< String, String> map = new HashMap< String, String> (); map.put("TCS", "$100 billion"); map.put("Wipro", "$21.5 billion"); //iteration over map using forEach() methodmap.forEach((k, v) -> System.out.println("Company: "+ k + ", Net worth: " + v)); } }

输出:
Company: Wipro, Net worth: $21.5 billionCompany: TCS, Net worth: $100 billion

    推荐阅读