了解HashMap原理对于日后的缓存机制多少有些认识。在网络中也有很多方面的帖子,但是很多都是轻描淡写,很少有把握的比较准确的信息,在这里试着不妨说解一二,本文并非原创,对本文有兴趣的读者可以看数据结构和Java集合框架,本文是对其第13章的总结,做了几年的开发,是时候总结一下了。
HashMap实现了Map接口,HashMap主要以键值(key-value)的方式来体现,笼统的说就是采用key值的哈希算法,外加取余最终获取索引,而这个索引可以认定是一种地址,既而把相应的value存储在地址指向内容中。这样说或许比较概念化,也可能复述不够清楚,来看列式更加清晰:
int hash=key.hashCode();//------------------------1
int index=hash%table.lenth;//table表示当前对象的长度-----------------------2
其实最终就是这两个式子决定了值得存储位置。但是以上两个表达式还有欠缺。为什么这么说?例如在key.hashCode()后可能存在是一个负整数,你会问:是啊,那这个时候怎么办呢?所以在这里就需要进一步加强改造式子2了,修改后的:
int index=(hash&Ox7FFFFFFF)%table.lenth;
到这里又迷惑了,为什么上面是这样的呢?对于先前我们谈到在hash有可能产生负数的情况,这里我们使用当前的hash做一个“与”操作,在这里需要和int最大的值相“与”。这样的话就可以保证数据的统一性,把有符号的数值给“与”掉。而一般这里我们把二进制的数值转换成16进制的就变成了:Ox7FFFFFFF。(注:与操作的方式为,不同为0,相同为1)。
例子:
10000000000000000000010001010111 //比如散列值为-1111
& 01111111111111111111111111111111 //与上int的最大值
00000000000000000000010001010111 //结果去掉了最前面的符号位
而对于hashCode()的方法一般有:
public int hashCode(){
int hash=0,offset,len=count;
char[] var=value;
for(int i=0;i<< 30;//最大上限
static final float DEFAULT_LOAD_FACTOR = 0.75f;//超过3/4时,容器的容量将会增加一倍+1
这里的格式与Word文档中有较大差异,如果阅读不方便,请下载附件!
分享到:
相关推荐
基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发...
最快的排序算法 javahash实现-Java-哈希算法-最快的实现,排序算法数据结构
glsl-hash-blur 使用随机散列来计算样本偏移量的快速模糊效果。 这会给模糊带来下雪/颗粒感。 需要时,您必须指定sample函数和iterations ( const或#define整数)。 vec3 tex( vec2 uv); #pragma glslify : blur...
'./Hash-GNN'. 2. uncompress the dblp11 dataset 'cd data/dblp11' 'cat dblp11.tar.gz* | tar -zxv' 3. confirm that the gcc library '-lgsl' has been installed. if no, 'sudo apt-get install libgsl-dev' ...
前端开源库-quick-hash快速散列,杂音散列优化性能,而不是碰撞避免。
采用java实现的常用hash算法归总。
前端开源库-happn-password-hash-and-salthappn密码散列和salt,node.js的简单、安全和直接密码散列/salt
【IT十八掌徐培成】Java基础第11天-02.Map集合-hash原理.zip
出于我的需要,我已经构建了Leaflet Hash Plus以支持扩展的功能集(其中一些功能需要Leaflet-hash)。 状态 该插件当前为Alpha版本:欢迎您对其进行测试,但请注意,此插件中使用的API,名称和约定可能会发生更改。...
【IT十八掌徐培成】Java基础第11天-03.Map集合-hash原理2.zip
散列函数hash 基于SHA-1。MATLAB可运行实现。
数据结构与算法分析java版 Table of Contents Data Structures and Algorithms in Java - 4 Introduction - 7 Part I Chapter 1 - Overview - 11 Chapter 2 - Arrays - 29 Chapter 3 - Simple Sorting -...
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
下载请校验文件Hash: SHA256: 18F55219C86FA4FE52F8A1A51B17C4EB99AF6C215D6AF8702555EA82AF83ACAA
Hopscotch-map:使用Hopscotch散列的快速哈希图和哈希集的C ++实现
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
RS-Hash Function Value: " + ghl.RSHash(key)); System.out.println(" 2. JS-Hash Function Value: " + ghl.JSHash(key)); System.out.println(" 3. PJW-Hash Function Value: " + ghl.PJWHash(key)); System....
哈希计算工具 java-hash
哈希计算工具 java-hash.7z
== 实践 Maven 和散列