hashmap学习笔记

初始化:

分配一个大小为2^n的数组空间,每个节点是一个链表

存储:
  1. 计算key对应的hashcode
  2. 根据hashcode,计算出对应值在数组中的存放位置
  3. 将key和value存到对应的数组位置,如果对应的位置已经存在元素,在链表上添加节点,如果节点数超过8,链表自动转换为红黑树的方式存储
读取:
  1. 根据key计算hashcode
  2. 根据hashcode计算存放位置index
  3. 根据index读取对应位置存放的数据,如果位置节点存在超过一个数据,遍历链表,调用equal函数扎到对应key的value
扩容:
  1. hashMap初始化大小为大于初始设定容量的最小的一个2^n值
  2. hashmap的默认加载银子loadfactor是0.75
  3. 当map使用的空间容量超过capacity * loadfactor时,扩容一倍,capacity <<=2
其他:
  1. hashcode函数要求:同样的key转换出来的hashcode值相同,不同key转换出来的key尽量不同
  2. hashcode不可能完全一一对应map空间的小标,一般用hashcode对空间长度取余的方式计算真实下标(hashcode & (capacity-1))
  3. hashMap线程不安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值