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。