欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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