一篇文章让你精通: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源码了解)的主要内容,如果未能解决你的问题,请参考以下文章