一、LinkedHashMap和ConcurrentHashMap
1、LinkedHashMap
(1)特点:元素被放入的顺序与元素被遍历取出的顺序一致
(2)举例:
Map<Character,Integer> map
= new LinkedHashMap<>();
map.put('a', 1);
map.put('b', 2);
map.put('c', 3);
System.out.println(map);
2、ConcurrentHashMap(面试常问)
特点:允许并发
二、Map集合的遍历
Map<Character,Integer> map
= new LinkedHashMap<>();
map.put('a', 1);
map.put('b', 2);
map.put('c', 3);
1、方法一:使用key的Set集合遍历
(1)特点:单独拿键,用键拿值
(2)举例:
for(char key: map.keySet()){
System.out.println(key + ":" + map.get(key));
}
2、方法二:使用value的Collection集合遍历
(1)特点:单独拿值
(2)举例:
Collection<Integer> values = map.values();
for(Integer v : values){
System.out.println(v);
}
3、方法三:使用Entry的Set集合遍历
(1)特点:单独拿键值,单独拿值
(2)举例:
for(Map.Entry<Character,Integer> pair : map.entrySet()){
System.out.println(pair.getKey()+":"+pair.getValue());
}
4、Map集合不能使用Iterator迭代器进行遍历,Collection集合可以使用Iterator迭代器进行遍历,原因是Collection集合继承了Iterable接口
三、Map集合中的getOrDefault()、putIfAbsent()和merge()
Map<Character,Integer> map
= new LinkedHashMap<>();
map.put('a', 1);
map.put('b', 2);
map.put('c', 3);
1、getOrDefault():Map集合中键存在则返回键对应的值,不存在则返回给定的值
(1)键存在
Integer result=map.getOrDefault('c', 99);
System.out.println(map);
System.out.println(result);
(2)键不存在
Integer result=map.getOrDefault('d', 99);
System.out.println(map);
System.out.println(result);
2、putIfAbsent():Map集合中给定键存在则不发挥作用,给定键不存在则将该键值对加入Map集合
(1)给定键存在
map.putIfAbsent('c', 88);
System.out.println(map);
(2)给定键不存在
map.putIfAbsent('d', 88);
System.out.println(map);
3、merge():Map集合中给定键存在,则在对应值上加上所给值,给定键不存在,则将此新键值对添加到Map集合中(完成加值和添加新键值对两个功能)
(1)给定键存在
map.merge('c',20,Integer::sum );
System.out.println(map);
(2)给定键不存在
map.merge('d',20,Integer::sum );
System.out.println(map);