Java基础之集合篇 (二)

2021-06-08 00:03

阅读:395

标签:快速   常量   hash   一个   try   含义   性能   jdk7   存放位置   

 一:Map接口实现类的结构:

技术图片

 

二:Map结构的理解技术图片

 

 

 三:HashMap的底层实现原理(重点!!!常考!!!以JDK7为例说明)

HashMap无法按照添加的顺序遍历,即其底层的添加是无序的,是按照hash值来确定存放位置的。

技术图片

注意版本之间的不同: JDK1.8 之所以会加入红黑树是因为当链表过长是会严重影响HashMap的性能,而红黑树具有快速增删改查的特点。

 技术图片

 

HashMap源码中的常量含义:

技术图片

关于加载因子:

加载因子也叫作扩容因子,用来判断什么时候进行扩容,假设加载因子为0.75,HashMap的初始容量为16,当HashMap中有16 * 0.75 = 12个容量时,HashMap就会进行扩容。如果加载因子越大,扩容发生的频率就会比较低,占用空间比较小,但是发生hash冲突的几率会提升,对元素操作时间会增加,运行效率降低;如果加载因子太小,那么表中的数据将过于稀疏(很多空间还没用,就开始扩容了),对空间造成严重浪费;而且因为容量默认为2的次方,当加载因子为0.75时,容量和加载因子的乘积为整数。所以系统默认加载因子取了0.5 -1 之间的0.75.

 

 LinkedHashMap是HashMap的子类,其相较于HashMap的不同就在于它重新定义了Node节点,即声明了Entry类,不仅包含了Node节点中定义的变量,还在其中多加了before和after指针,用于查找上一个和下一个元素。这样使得LinkedHashMap能够按照添加的顺序进行遍历。

Java基础之集合篇 (二)

标签:快速   常量   hash   一个   try   含义   性能   jdk7   存放位置   

原文地址:https://www.cnblogs.com/Melo-ccyfy/p/14545221.html


评论


亲,登录后才可以留言!