一、HashMap
HashMap跟HashSet的底层原理是一模一样的,都是基于哈希表实现的,只是Set集合中的元素只要键数据,不要值数据而已。实际上Set集合就是基于Map实现的。
第一次添加数据的时候,会生成一个16的数组,然后作为一个Entry对象放在一起,利用键计算哈希值,与底层数组的长度进行某个计算然后放入数组,如果有新元素也要放在老元素的位置,会把新元素挂在老元素的下面,一旦到了12,会把数组扩容成原来的两倍,然后把数据重新算到新的数组里,如果长度超过8&数组长度>=64,会转换成红黑树。
HashMap的键依赖hashCode方法和equals方法保证键的唯一,如何键是自定义类型的对象,可以通过重写这两种方法。
二、LinkedHashMap
底层数据结构依旧是基于哈希表实现的,只是每个键值对元素又额外的多了一个双链表的机制记录元素顺序(保证有序)。
三、TreeMap
TreeMap的特点按照键的大小默认升序排序。TreeMap跟TreeSet集合的底层原理一样。
TreeMap集合同样也支持两种方式来指定排序规则。
TreeMap集合有一个有参数构造器,支持Comparator比较器对象