Map
1、HashMap
-
非线程安全,效率高。
-
允许空键值。
-
HashMap的默认初始化容量是16,默认加载因子是0.75。
-
注意:Map中如果key重复会覆盖前面的value。
2、HashTable
-
线程安全,效率低。
-
不允许空键值。
-
HashTable默认初始容量是11,默认加载因子是0.75。
3、SortedMap
- SortedMap中的key特点:无序不可重复,但是存进去的元素按照元素的大小自动排序。
- 如果想自动排序:key部分的元素需要,1、实现Comparable接口。2、单独写比较器。
如何决定使用 HashMap 还是 TreeMap?
对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。
然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。
基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。
HashMap 的实现原理
哈希表又叫散列表,哈希表底层是一个数组,这个数组中每一个元素都是一个单向链表。
每个单向链表都一个独一无二的hash值,代表数组的下标。
在某个单向链表中的每一个节点上的hash值都相等。
hash值实际上是key调用hashCode方法,再通过“hash function(hash函数)”转换成的值。
如何向哈希表中添加元素?
先调用被存储的key的hashCode方法,经过某个算法得出hash值,
如果在这个哈希表中不存在这个hash值,则直接加入元素。
如果该hash值已存在,继续调用key之间的equals方法,
如果equals方法返回false,则将该元素添加,
如果equals方法返回true,则覆盖。