HashCode 生成方法
Step1.int result=任意整数(奇素数如31);
Step2.
计算hashcode
int类型计算方法:
result = 31 * result + int类型的数值
对于boolean类型计算方法:
result = 31 * result + (b?1:0) //b为boolean类型数值
对于byte/char/short/int/类型计算方法:
result = 31 * result + (int)f //f为byte/char/short/int/类型数值
对于long类型计算方法:
result = 31 * result + (int)(f^(f>>>32))//long类型的数值
对于float类型计算方法:
result = 31 * result + Float.floatToIntBits(f)
对于double类型计算方法:
result = 31 * result + (int)(Double.doubleToLongBits(f)^(Double.doubleToLongBits(f)>>>32))
如果该域是一个对象引用则用equals方法比较这个域,调用hashcode如果这个域为null则返回0
如果该域是一个数组则把每个元素作为单独的域处理然后将每个域的hashcode相加起来
如果一个域的值可以由其他域计算出来 则可以将这样的域排除在外
Equals比较计算中没有用到的域必须排除在外
如果一个类是不可变的 并且计算散列码的开销也比较大 则可将其散列码缓存在对象内部而不是每次请求都重新计算其散列码 如果该对象会被用作散列键 则一开始创建实例时就应该计算其散列码 否则可以选择延迟初始化散列码 当其hashcode第一次调用时在进行初始化
eg://延迟初始化
private volatile int hashCode;
@Override
public int hashCode(){
int result = hashCode;
if( result == 0 ){
result = 31;
result = 31 * result + areaCode;
result = 31 * result + prefix;
hashCode = result;
}
return result;
}
// volatile 说明:用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的
相关推荐
java中Hashcode的作用
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
主要给大家介绍了关于Java中HashCode方法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
实际上,hashcode根本不能代表object的内存地址。
主要介绍了java 中HashCode重复的可能性的相关资料,这里提供实例及测试代码,需要的朋友可以参考下
NULL 博文链接:https://songjianyong.iteye.com/blog/1676894
java中hashcode和equals的详解.pdf
在java中一个hashCode算法,可以用来计算一个字符串的hash值,今天一个朋友突然问俺能不能在js中计算hashCode,要求和java的hashCode计算结果一样。 对于java的hashCode,以前到现在也一直没有了解过其算法,不过...
Java基础加强_ArrayList_HashSet的比较及Hashcode分析
java中hashcode()和equals()的详解.docx
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用以及equals()和==的区别,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,...
更清楚的了解hashcode()和equals()方法。
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
在Java应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上equals比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需...
主要介绍了Java 中HashCode作用以及hashcode对于一个对象的重要性,对java中hashcode的作用相关知识感兴趣的朋友一起学习吧
总结非常完全的文档。对Java初学着和进阶学习的学者是一份相当不错的Java学习资料
主要介绍了深入理解Java中HashCode方法,具有一定借鉴价值,需要的朋友可以参考下
在讲解数组时(java提高篇(十八)——数组),我们提到数组是java中效率高的数据结构,但是“高”是有前提的。第一我们需要知道所查询数据的所在位置。第二:如果我们进行迭代查找时,数据量一定要小,对于大数据量...