HashMap学习笔记:put方法

之前忙着实习工作,现在有些时间学习一下java的基础知识。

今天研究HashMap。通过对源码的调试进行研究。

HashMap在jdk1.5后支持泛型。

HashMap有三个构造函数:

HashMap map = new HashMap(); //默认的构造方法,会分配容量大小为16,递增比例是0.75的map

HashMap map = new HashMap(int initialCapacity); //给定一个初始化容量

HashMap map = new HashMap(int initailCapacity, float l);//给定一个初始化容量容量翻倍临界比例。容量翻倍临界比例的意思是当前容量达到某个值,满足:这个值等于集合容量 * 容量翻倍临界比例时,就会对集合进行翻倍。例子:当前集合容量是10,当前容量是4,容量翻倍临界比例是0.5。如果当前容量=5时就已经达到了翻倍临界值:10 * 0.5 = 5

调用map的put(K key, V value);方法。

底层首先: 判断key是否为null,如果不为null,hash一下key的hashCode()返回的值,得到hash值,再用这个值与集合长度进行与操作得到的值其实就是确定这个key要put到map的哪个位置。

hash的步骤:

h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);

顺便补一下基础:^ 这个操作符是异或操作,双目运算符。两个数相同为0不同为1。 0 ^ 0 = 0; 1^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1

>>> 是无符号右移。

确定了要put到哪个位置,就再判断从集合中这个位置起,判断是否有值。判断的依据是,key的hash相同且key对应的value == 相同或者 equals相同。满足就将新值替换旧值,并返回旧值。如果没有值,就直接插入到集合中。之后判断是否达到容量翻倍临界值,达到了就进行集合翻倍和将值拷贝到翻倍后的集合中,元素在新集合中的位置也是用上面所说的方法hash一下key的hashCode()返回的值,得到hash值,再用这个值与集合长度进行与操作,确定。没有就跳过。结束

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值