Java重修笔记 第四十六天 Map 接口、HashMap 类
-
Map 接口
1. 用于保存具有映射关系的数据:Key-Value(双列元素)
2. Map 中的 key 和 value 可以是任何引用类型的数据,会封装到 HashMap$Node 对象中
3. Map 中的 key 不允许重复,原因和 HashSet 一样,value 可以重复
4. 添加重复的 key ,会导致 value 的值被替换
5. HashMap 的 key 和 value 都可以传入 Object 类型的数据, 但常用 String 类型的数据来当做 key
6. Key-Value 是放在 HashMap$Node 中的,又因为 Node 类实现了 Map.Entry 接口,所以有些书上也说 一对 Key-Value 就是一个 Entry 结点
7. HashMap将所有 Node 结点全部封装到 EntrySet 的内部类里,方便遍历(KeySet 和 Values同理,不过一个分装 key 集合,一个分装 value 集合)
-
HashMap 接口的方法
1. public V put(K key, V value)
添加一组新的键值对,如果 key 的值冲突,则会将就得 value 值替换为新的 value 值
2. public V remove(Object key)
通过 key 的值删除该键值对
3. public V get(Object key)
根据 key 获取 value
4. public int size()
获取键值对数量
5. public boolean isEmpty()
判断该集合键值对的数量是否为零
6. public void clear()
将所有键值对全部删除
7. public boolean containsKey(Object key)
查找包含 key 的键值对是否存在
8. public boolean containsValue(Object value)
查找包含 value 的键值对是否存在
-
HashMap 的遍历方式
1. 增强for循环取出所有的 key ,再通过 key 取 value
System.out.println("-----第一种方式-----");
Set<Integer> keySet = hashMap.keySet();
for (Object i :keySet) {System.out.println(i + " - " + hashMap.get(i));
}
2. 通过迭代器获取 key 和 value
System.out.println("-----第二种方式-----");
Iterator<Integer> iterator = keySet.iterator();
while (iterator.hasNext()) {Integer next = iterator.next();System.out.print(next + " - " + hashMap.get(next) + "\t");
}
3. 增强for循环取出 value
System.out.println("-----第三种方式-----");
Collection<Integer> values = hashMap.values();
for (Object i :values) {System.out.print(hashMap.get(i) + "\t");
}
4. 通过迭代器获取 value
System.out.println("-----第四种方式-----");
Iterator<Integer> iterator1 = values.iterator();
while (iterator1.hasNext()) {Integer next = iterator1.next();System.out.print(next + "\t");
}
5. 增强for循环使用 EntrySet 获取键值对
System.out.println("-----第五种方式-----");
Set<Map.Entry<Integer, Integer>> entries = hashMap.entrySet();
for (Map.Entry m :entries) {System.out.print(m.getKey() + " - " + m.getValue() + "\t");
}
6. 通过迭代器使用 EntrySet 获取键值对
Iterator<Map.Entry<Integer, Integer>> iterator2 = entries.iterator();
while (iterator2.hasNext()) {Map.Entry<Integer, Integer> next = iterator2.next();System.out.print(next.getKey() + " - " + next.getValue() + "\t");
}
-
HashMap 小结
1. Map接口的常用实现类:HashMap、Hashtable 和 Properties
2. HashMap是 Map 接口使用频率最高的实现类
3. HashMap 是以 key-val 对的方式来存储数据(HashMap$Node 类型)
4. key 不能重复,但是值可以重复,允许使用 null 键和 null 值
5. 如果添加相同的 key , 则会覆盖原来的 key-val ,等同于修改(key不会替换, val会替换)
6. 与 HashSet 一样,不保证映射的顺序,因为底层是以 hash 表的方式来存储的
7. HashMap 没有实现同步,因此是线程不安全的