hashmap

jdk7  数组+链表

jdk8  数组+链表+红黑树

  • hash

      也称散列、哈希,基本原理即使把任意长度的输入,通过hash算法变成固定长度的输出。

      这个映射的规则就是对应的hash算法,而原始数据映射后的二进制串就是哈希值。

      两个对象不同,hashcode肯定不同。hashcode相同,对象不一定相同。

  • Node数据结构分析

alt+7:查看当前类所有方法

  • hashmap的底层存储结构

node数组,默认长度16,发生hash冲突时会形成链表,当链表长度达到9并且所有元素达到64个,链表结构升级为红黑树。

  • put

node里的hash值:先获取key的hashcode,经过扰动函数,使hash值更散列。

路由寻址公式:位运算 h&(length-1) 效率高于 取模运算 hash%length。

容量必须是2的指数次幂,new时指定的如果不是,会初始化成2的指数次幂。

当容量是2的指数次幂时,h&(length-1)==hash%length,且不会造成空间浪费。

  • 扩容

以空间换时间

  • 缺省常量值

缺省数组大小:1<<4   16

缺省数组最大长度:1<<30

缺省负载因子大小:0.75

树华阈值:8.链表长度超过此值,会升级成树

树降级称为链表的阈值:6

树化的另一个参数,当hash表中的所有元素个数超过64,

jdk1.7 链表头插法

jdk1.8 链表尾插法

元素个数超过容量(数组)的3/4,会扩容。默认初始容量:16

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值