HashMap原理

解析hashmap原理主要从结构、存储、线程安全角度进行分析

接口map实现类:

hashmap:
linkhashmap:
treemap:
hashtable:
concurrentHashmap:

结构:

jdk1.7 之前 数组+链表
jdk1.8 后 数组+链表/红黑树

当链表元素个数大于等于8时会自动将链表转为红黑树结构
当删除元素个数为小于等于6时红黑树会自动转为链表

为什么要设置8为转换的临界点:
因为当元素个数为8时,链表的查询复杂度为:8/2=4;而红黑树的查询复杂度为log(8)=3;
所以设置当元素个数为8时转为红黑树。

数组存放节点数据 ,链表存放相同节点地址的数据

扩容 和容量

容量:hashmap初始化的数组容量
构建map传入容量:HashMap map=new HashMap(32);
hashmap 不会完全按照用户自己设置的容量初始化,会按照自己的一定算法生成一个大于当前容量的第一个2的幂等数。
原因:因为hashmap初始化的容量必须要设置为2的幂等,防止用户输入的值不是2的幂等数,通过计算生成一个

构建没有设置默认值:
当没有设置hashmap的默认值时,在构造hashmap时会进行默认容量设置,默认容量设置为16

<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值