/**
* Returns index for hash code h.
*/
static int indexFor(int h, int length) {
// assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
return h & (length-1);
}
这个方法有点意思,主要作用是定位hashmap里的bucket。
-------------------------------------------------------
大家知道hashmap底层就是一个数组,然后数组里每个元素装了个链表。
这个数组元素称为bucket桶
-------------------------------------------------------
先复习一下逻辑与。
0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;
第二个参数length始终为2的n次方,所以,
换成二进制数就是 100,1000,10000,...
(length -1)就是 11, 111,1111,...
这样的话,
第一个参数h比第二个参数小的情况下,那结果就是h。
第一个参数h比第二个参数大的情况下,如下:
例:
h=18 -> 10010
length-1=15 -> 01111
10010
01111
-------
00010 (即2)
也就是h-length,
假设 h=5,length=16, 那么 h & length - 1 将得到 5;如果 h=6,length=16, 那么 h & length - 1 将得到 6 ……如果 h=15,length=16, 那么 h & length - 1 将得到 15;但是当 h=16 时 , length=16 时,那么 h & length - 1 将得到 0 了;当 h=17 时 , length=16 时,那么 h & length - 1 将得到 1 了
这样就能保证取得合理的索引值。
参考blog:http://alex09.iteye.com/blog/539545
分享到:
相关推荐
这个文档“ HashMap详解(通俗易懂)”很好的阐述了hashmap的底层数据结构示意,希望对学习java的人有帮助
如果我么需要有一个线程安全的HashMap,可以使用Collections.synchronizedMap(Map m)方法获得线程安全的HashMap,也可以使用ConcurrentHashMap类创建线程安全的map。 存储的元素在jdk1.7当中是Entry作为存储的
Hashmap详解
Java HashMap类详解收藏的资料,供大家一起分享
HashMap 的特点: HashMap 的键必须是唯一的,不能重复。 HashMap 的键允许为 null,但只能有一个这样的键;值可以有多个 null。 HashMap 是无序的,它不保证元素的任何特定顺序。 HashMap 不是线程安全的;多线程...
java中HashMap详解.pdf
HashMap数据结构,HashMap的构造方法,HashMap的put,HashMap的get
无序:HashMap中的元素没有固定的顺序,可以通过迭代器或for-each循环遍历元素。 总之,HashMap是一种非常实用的数据结构,可以用于存储键值对,并且具有较高的性能和灵活性。但是,在使用HashMap时需要注意线程...
对HashMap的put方法的源码进行详细解读,分析put方法源码中的内在逻辑关系,欣赏源码独特之美,从中学习更为精致的编程思维
本文档主要讲述的是java中HashMap详解;HashMap和HashSet是Java Collection Framework的两个重要成员,其中HashMap是Map接口的常用实现类,HashSet是Set接口的常用实现类。虽然HashMap和HashSet实现的接口规范不同,...
主要介绍了java HashMap内部实现原理详解的相关资料,需要的朋友可以参考下
HashMap中红黑树TreeNode的split方法源码解读,对split方法源码的上下文/变量定义,及所调用的关键方法都给出了详细解释说明,欢迎指正
#️⃣ single header hashmap implementation for C and C++
HashMap之resize()方法源码解读,分两部分概述扩容方法涉及到的处理:创建新数组,将旧数组元素转移到新数组上
哈希MAP的 讲解,讲解的通俗易懂 挺好的
下面小编就为大家带来一篇基于HashMap遍历和使用方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文主要介绍了java无锁hashmap原理与实现,大家参考使用吧
hashmap实例 hashmap实例hashmap实例hashmap实例
HashMap介绍和使用