HashMap-02

HashMap-02

1. 构造器

HashMap在创建对象时,可的调用构造器有三种,无参构造器(常用),初始化容量大小,初始化容量和加载因子

初始化的时候,

  • 默认容量为16,static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
  • 默认最大容量为1<<30(高位符号位), static final int MAXIMUM_CAPACITY = 1 << 30;
  • 加载因子,static final float DEFAULT_LOAD_FACTOR = 0.75f;

Jingxc大约 6 分钟java后端HashMapjava后端
HashMap-01

HashMap-01

HashMap基础

HashMap存储结构

在JDK1.7中和JDK1.8中有所区别: 在JDK1.7中,由”数组+链表“组成,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。

在JDK1.8中,由“数组+链表+红黑树”组成。当链表过长,则会严重影响HashMap的性能,红黑树搜索时间复杂度是O(logn),而链表是O(n)。因此,JDK1.8对数据结构做了进一步的优化,引入了红黑树,链表和红黑树在达到一定条件会进行转换:

当链表超过8且数组长度(数据总量)超过64才会转为红黑树 将链表转换成红黑树前会判断,如果当前数组的长度小于64,那么会选择先进行数组扩容,而不是转换为红黑树,以减少搜索时间。 ArrayList底层是动态数组数据结构,查询快,增删慢(因为Array增删需要移动数据),LinkedList底层是双重链表数据结构,查询相对较慢(因为Link查询需要移动指针),增删块。


Jingxc大约 21 分钟java后端HashMapjava后端