Map接口为我们提供了三种view接口
- Set<K> keySet()
- Collection<V> values()
- Set<Map.Entry<K, V>> entrySet()
- 在以上三个接口中使用remove方法也会删除map中一个key-value对
HashMap
- key, value可以为null
- 使用containsKey来判断key是否存在
- 非synchronized
- 存储结构:transient Node<K,V>[] table;
- hash冲突: 加入到链表中.
HashTable
- key, value都不可以为空
- 线程安全(锁住整张表)
- 存储结构使用transient Node<K,V>[] table;
- hash冲突, 加入到链表中
ConcurrentHashMap
- 线程安全
- 使用分段是存储,每个分段都有自己的锁(把锁的颗粒度减小)