一篇文章让你精通:java集合讲解(六,Map源码了解)

Posted 韶光不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇文章让你精通:java集合讲解(六,Map源码了解)相关的知识,希望对你有一定的参考价值。

相信大家学习了之前的内容对Map有了一定的了解,下面就让我们加深对map的了解,一起来看看hashmap,linkhashmap,treenmap的源码进行简单了解。

 HashMap

1,jdk1.7及以前,hashmap以一个数组加链表实现的存储结构

 2,每一个节点是一个Entry,其中包括:键(key),值(value),键的哈希码(hash),下一个节点的引用next(指向下一个Entry)四个部分。

 3,如果你的key是null,添加数据放在索引为0的位置,查找也是从0的位置。

4,在调用put方法添加键值对时,哈希表三步添加键值对原理实现:是计算keyd的哈希码,与value无关

5,jdk1.7中put方法添加键值对时,当没有key哈希码不同时,添加在链表的第一个位置(头插法),key相同时,后面添加value覆盖前面添加value。(在jdk1.8后就是尾插法,添加在链表后面)

6,get方法根据key获取value,实际上根据key找到Entry,Entry找到value。

7,当我们添加元素到12(可以自己设置:数组长度(默认16)*填充因子(默认0.75f))数组扩容原来二倍(满足达到阈值,主数组没有新存储位置有节点)

8,jdk1.8后的变化:当链表存储数据>=8,不采用链表进行存储,采用红黑树进行存储(提高效率,增加查询速率)

TreeMap

 1,每一个节点是一个Entry,其中包括:key,value,左孩子,右孩子,根(默认是黑色)

2,添加原理(1,添加第一个元素默认为根,2,再次提交,就需要运用外部比较器与根进行比较(第一次比较都是比较根),如果外部比较器为null,就使用内部比较器进行比较。然后添加,当添加key相同,value进行覆盖,3,比较比根小,添加在左节点,比根大,添加在右节点(如果下面还有就继续向下比较)

以上是关于一篇文章让你精通:java集合讲解(六,Map源码了解)的主要内容,如果未能解决你的问题,请参考以下文章

一篇文章让你精通:java集合讲解(练习处理)

一篇文章让你精通:java集合讲解(三,Set)

一篇文章让你精通:java集合讲解(二,LinkList)

一篇文章让你精通:java集合讲解(八,集合的解析与总结)

一篇文章让你精通:java集合讲解

一篇文章让你精通:java集合讲解(四,Set)