携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天。
Map常用的几种类型:HashMap(速度快)、LinkedHashMap(遍历快)、TreeMap(排序)、ConcurrentHashMap(线程安全)。
Map的几种遍历方式
- 使用for循环遍历map;
- 使用entrySet遍历map;
- 使用迭代器的方式遍历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");
- 使用for循环遍历map;通过key从而得到对应value,不适用于中途插入或者删除元素。
//for循环方式
for(String key : map.keySet()){
String value = map.get(key);
System.out.println("【for循环方式】key:" + key + "\t value:" + value);
}
输出的结果为:
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());
}
输出的结果为:
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);
}
输出的结果为:
总结
通过iterator迭代器对map进行遍历的方式比较高效,而使用map.forEach()遍历的效率比较低。在对集合进行遍历删除时,使用迭代器iterator能够安全的删除对象,避免出现ConcurrentModifiedException。