首先温故一下java.util.HashMap的实现
int i = indexFor(hash, table.length);
static int indexFor(int h, int length) {
return h & (length-1);
}
原理:java中的HashMap是基于哈希表的 Map 接口的实现,内部是用数组+链表实现的,性能方面 哈希表>二叉树>线性表.为什么哈希表这么快呢?通过查看源码得知
通过把哈希值和数组长度进行与运算,为什么要进行与运算呢?因为与运算后得到的数字一定大于等于0并且小于等于数组长度。
(&运算:同位都为1则为1,否则为0。这样2个数进行&运算后得到的10进制数一定0<=n<=len)。
--------------------------------------
联想:不废话单刀直入,HashMap是由hash和链表混搭成的,于是我就想到为什么不那hash和平衡二叉树进行混搭呢?那样即便是冲突了,访问速度也不会完全退化到线性表啊!我想这个我们的Doug Lea大牛应该早就考虑过了,我估计他主要是HashMap做为单纯的hash表来使用,告知使用者尽量减少冲突,那个链表只是个小小的辅助职业而已。
于是我想在以后的开发中如果有比如有某个需求会用到hash+tree,那这还真是个不错的想法,至少这样混搭避免了大数组的创建和拷贝。
分享到:
相关推荐
Java语言使用hashmap实现向购物车添加删除修改商品,显示商品信息
hashmap的底层及源码解析,很适合大家的学习,不要积分。
hashmap的C++实现,对于学习C++方面的很有用
用js代码实现java中hashmap 的所有功能
hashmap实现原理.pdf
HashMap基于哈希表(HashTable)实现,它通过散列算法将键值对映射到数组中。在HashMap中,每个键值对都有一个唯一的哈希码,该哈希码决定了键值对在数组中的位置。当插入一个键值对时,HashMap会计算键的哈希码,...
用hashmap结构将字典文件中的词条装入内存,并基于该结构进行查询
listview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmap
C语言实现hashMap,包含创建hashMap、插入hashMap、查找hashMap、删除hashMap,已经若干经典的hash函数。文章链接:https://blog.csdn.net/sxf1061700625/article/details/109594495
Javascript实现和操作HashMap,压缩包里面有hashmap定义和操作的例子
基于HashMap的用户标签处理兼Java中HashMap实现原理研究
HashMap的实现原理
NULL 博文链接:https://mox-sir.iteye.com/blog/2124644
用数据结构的思想实现java中的类hashmap
HashMap源码实现红黑树添加元素和删除元素
HashMap重写实现 轻量级实现 使用自定义的轻量对象HashObjectMap替代jdk的HahMap HashMap里的Entry占用较大内存,可以用自己实现的轻量级容器替换,步骤如下: 1、 缓存的对象需要继承BaseHashObject /** * 这个类...
一线大厂BATJ面试题讲解-hashmap原理实现
HashMap底层原理.md
hashmap实例 hashmap实例hashmap实例hashmap实例