Map的几种遍历方式应用场景

95 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天。

Map常用的几种类型:HashMap(速度快)、LinkedHashMap(遍历快)、TreeMap(排序)、ConcurrentHashMap(线程安全)。

Map的几种遍历方式

  1. 使用for循环遍历map;
  2. 使用entrySet遍历map;
  3. 使用迭代器的方式遍历map.

Java代码示例:将元素放至map中;

Map<String, String> map = new HashMap<>();
map.put("startDate", "2022-08-01");
map.put("endDate", "2022-08-04");
map.put("status", "10");
map.put("invoiceNo", "FB20220804");
  1. 使用for循环遍历map;通过key从而得到对应value,不适用于中途插入或者删除元素。
//for循环方式
for(String key : map.keySet()){
    String value = map.get(key);
    System.out.println("【for循环方式】key:" + key + "\t value:" + value);
}

输出的结果为:

image.png

2.使用entrySet遍历map;通过使用该方式可同时获取map的key与value,不适用于中途插入或者删除元素。

//entrySet方式
for(Map.Entry<String, String> entry : map.entrySet()){
    System.out.println("【entrySet方式】key:" + entry.getKey() + "\t value:" + entry.getValue());
}

输出的结果为:

image.png

3.使用迭代器的方式遍历;通过使用迭代器遍历map,可以有效防止ConcurrentModificationException的发生

//迭代器①
Set set = map.entrySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()){
    Map.Entry<String, String> entry = (Map.Entry<String, String>)iterator.next();
    System.out.println("【迭代器的方式①】key:" + entry.getKey() + "\t value:" + entry.getValue());
}

//迭代器②
Iterator itera = map.keySet().iterator();
while(itera.hasNext()){
    String key = "";
    String value = "";
    key = itera.next().toString();
    value = map.get(key);
    System.out.println("【迭代器方式②】key:" + key + "\t value:" + value);
}

//迭代器③
Iterator it = map.entrySet().iterator();
String key = "";
String value = "";
while (it.hasNext()){
    Map.Entry entry = (Map.Entry) it.next();
    key = entry.getKey().toString();
    value = entry.getValue().toString();
    System.out.println("【迭代器方式③】key:" + key + "\t value:" + value);
}

输出的结果为:

image.png

总结

通过iterator迭代器对map进行遍历的方式比较高效,而使用map.forEach()遍历的效率比较低。在对集合进行遍历删除时,使用迭代器iterator能够安全的删除对象,避免出现ConcurrentModifiedException。