1 Map 概览

如果向 **
Map** 中添加 key 重复的元素,则会将之前 key 对应的 value 修改。

2 Map 的遍历
Map 对象大概一共有 4 种遍历的方法:
【方法一】 for-each 遍历 Map.entrySet() 方法 —- 同时获取键值对
Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (Map.Entry<Integer, Integer> entry : map.entrySet()) {System.out.printf("key=%d, value=%d\n", entry.getKey(), entry.getValue());}
类似于 Python 中的
for key, value in map.items():
【方法二】 for-each 中单独遍历 key 和 value(效率最高)
for (Integer key : map.keySet()) {System.out.println("key=" + key);}for (Integet value : map.values()) {System.out.println("value=" + value);}
【方法三】使用 Iterator 遍历
Interaotr<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry<Integer, Integer> entry = entries.next();System.out.printf("key=%d, value=%d\n", entry.getKey(), entry.getValue());}
不适用泛型:
Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry) entries.next();Integer key = (Integer) entry.getKey();Integer value = (Integer) entry.getValue();System.out.printf("key=%d, value=%d\n", key, value);}
【方法四】通过键查找值(效率很低)
for (Integer key : map.keySet()) {Integer value = map.get(key);System.out.printf("key=%d, value=%d\n", key, value);}
效率低的原因是使用键计算值的操作是需要耗费时间的。
3 Map 的复制
首先 Map 拷贝的方法有 3 种:
=—- 浅拷贝Map.putAll()—- 深拷贝- for 循环手动拷贝 —- 深拷贝
= 是浅拷贝, putAll() 是深拷贝
public class mapCopy {public static void main(String[] args) {Map<String, Object> map1 = new HashMap<>();map1.put("name", "Holy");map1.put("age", 12);Map<String, Object> map2 = new HashMap<>();map2.putAll(map1);map2.remove("name");System.out.println(map1); // 深拷贝,map1 的内容没有改变System.out.println(map2);map2 = map1;map1.remove("name");System.out.println(map1); // 浅拷贝,map1 的内容被改变System.out.println(map2);}}
输出结果:
{name=Holy, age=12}{age=12}{age=12}{age=12}
手动拷贝就不展示了,主要是使用 Map.entrySet() 方法遍历 Map 的 key 和 value。
