Java集合中的Map详解

Map

Java集合中的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 的实现原理

Java集合中的Map详解
哈希表又叫散列表,哈希表底层是一个数组,这个数组中每一个元素都是一个单向链表。

每个单向链表都一个独一无二的hash值,代表数组的下标。

在某个单向链表中的每一个节点上的hash值都相等。

hash值实际上是key调用hashCode方法,再通过“hash function(hash函数)”转换成的值。


如何向哈希表中添加元素?

先调用被存储的key的hashCode方法,经过某个算法得出hash值,

如果在这个哈希表中不存在这个hash值,则直接加入元素。

如果该hash值已存在,继续调用key之间的equals方法,

如果equals方法返回false,则将该元素添加,

如果equals方法返回true,则覆盖。