Java中的HashMap源码分析 【进行了最基本的分析】
程序员文章站
2022-04-15 20:54:14
HashMap源码分析 按住 ctrl点击 HashMap进入源码 //这个是 初始化的长度 为 1<<4 结果为:16 << 位运算符 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //这个是最大的容量 2的30次方 static final int MAXIMUM_CAPACITY = 1 << 30; //这个是map集合的容量为100 如果...
HashMap源码分析
按住 ctrl点击 HashMap进入源码
//这个是 初始化的长度 为 1<<4 结果为:16 << 位运算符
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
//这个是最大的容量 2的30次方
static final int MAXIMUM_CAPACITY = 1 << 30;
//这个是map集合的容量为100 如果过75%了 就需要扩容了
static final float DEFAULT_LOAD_FACTOR = 0.75f;
//这个意思是 如果数组的长度大于64 且链表超过8 就会产生红黑树
static final int TREEIFY_THRESHOLD = 8;
//这个意思是 当链表长度小于6 调整成链表
static final int UNTREEIFY_THRESHOLD = 6;
//这个意思是 当链表长度大于8的时候,并且集合元素个数大于64 产生红黑树
static final int MIN_TREEIFY_CAPACITY = 64;
// 哈希表中的数组
transient Node<K,V>[] table;
//元素个数
transient int size;
按住 ctrl点击 new 的HashMap进入源码
这个是根据给定的元素 如果大于75 集合进行扩容
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
}
刚创建hashmap之后没有添加元素 table=null size=0;
总结:
1. HashMap刚创建时,table=null 为了节省空间,当添加第一个元素时,table容量调整为16
2.当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的2倍。目的是减少调整元素的个数。
3.jdk1.8 当每个链表长度大于8,并且元素个数大于64时,会调整为红黑树,目的时调高执行效率。
4.Jdk1.8 当链表长度为6时,调整成链表
5.jdk1.8以前,链表时头插入,jdk1.8以后是尾插入。
本文地址:https://blog.csdn.net/qq_45162683/article/details/110972585
上一篇: 数据仓库ETL工具箱——数据流主线详解
下一篇: ASIC芯片设计流程
推荐阅读
-
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
深入源码分析Spring中的构造器注入
-
Java中的容器(集合)之HashMap源码解析
-
[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的
-
Java中super关键字的详细分析
-
【Java】NIO中Selector的select方法源码分析
-
别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】
-
分析JAVA中几种常用的RPC框架
-
netty中的发动机--EventLoop及其实现类NioEventLoop的源码分析