关于hashcode的作用

  假如你要将某对象存入hash相应的集合中(比如hashSet)时,是根据对象的hashcode来判断是否为同一对象的,一般默认hashcode是根据对象地址来算出的,而equals方法默认也是判断两对象地址是否相等,所以一般如果不重写equals方法,hashcode方法也不改写,而如果改写了equals方法让两不同地址对象equals为true,同要改写hashcode,让他们的hashcode也能相等。

  为什么呢?因为如果你要将对象存入hashSet中时,如果两对象equals为true,那么应该是存一个的,但如果hashcode不一样,实际却是两个都有存入这种情况,所以要将hashcode也改写成一样的。

  还有一点要注意,如果改写对象hashcode方法,那么将此对象存入hashSet中后就不要改变此对象中用来算出hashcode值的属性变量,因为这样会改变此对象的hashcode值,可能造成hashSet再也不能操作此对象,造成内存泄漏!!

时间: 2024-12-05 11:13:34

关于hashcode的作用的相关文章

HashCode的作用

http://www.cnblogs.com/xrq730/p/4842028.html 前言 Object提供给我们了一个Native的方法“public native int hashCode();”,本文讲讲Hash是什么以及HashCode的作用 Hash 先用一张图看下什么是Hash Hash是散列的意思,就是把任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值.关于散列值,有以下几个关键结论: 1.如果散列表中存在和散列原始输入K相等的记录,那么K必定在f(K)的存储

如何理解hashCode的作用:

http://blog.csdn.net/dandanteng/article/details/7453010 有许多人学了很长时间的Java,但一直不明白hashCode方法的作用, 我来解释一下吧.首先,想要明白hashCode的作用,你必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复. 那么这里就有一个比较严重的问题了:要想保

Java中hashCode的作用

转  http://blog.csdn.net/fenglibing/article/details/8905007 Java中hashCode的作用 2013-05-09 13:54 64351人阅读 评论(17) 收藏 举报  分类: JAVA实用笔记(142)  版权声明:本文为博主原创文章,未经博主允许不得转载. 以下是关于HashCode的官方文档定义: [plain] view plain copy hashcode方法返回该对象的哈希码值.支持该方法是为哈希表提供一些优点,例如,j

hashcode的作用(转载+议论)

转载: 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set.前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复.那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了.但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了.也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次e

Java之hashCode的作用和equals方法的重构规则

这个是博主对hashcode的初步理解,以后加深了会再来更新: 1.hashcode是什么? hashcode是对象的散列码,不同的对象几乎不一样,说几乎是因为还是可以一样的. 特点:每一个对象都有hashcode,默认的值是每一个对象的地址. 2.hashcode的作用: 博主已知的方便用户使用散列表插入数据,我们知道,集合有两种,list----可重复,set----不可重复. 其中set实现不可重复就需要使用到hashcode和equals方法. 散列表set是使用链表数组实现的,每一个列

Java学习(十五):hashCode的作用

1.hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的: 2.如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同: 3.如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点: 4.两个对象的hashCode相

java 当中的hashcode的作用

以下是关于HashCode的官方文档定义: hashcode方法返回该对象的哈希码值.支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表.       hashCode 的常规协定是:    在 Java 应用程序执行期间,在同一对象上多次调用hashCode方法时,必须一致地返回相同的整数,前提是对象上  equals 比较中所用的信息没有被修改.从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致.    如果根据 equals(O

Java & hashCode作用

首先,想要明白hashCode的作用,你必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set.你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复.那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了.但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了.也就是说,如果集

hashCode与equals的作用与区别及应当注意的细节

先来试想一个场景,如果你想查找一个集合中是否包含某个对象,那么程序应该怎么写呢?通常的做法是逐一取出每个元素与要查找的对象一一比较,当发现两者进行equals比较结果相等时,则停止查找并返回true,否则,返回false.但是这个做法的一个缺点是当集合中的元素很多时,譬如有一万个元素,那么逐一的比较效率势必下降很快.于是有人发明了一种哈希算法来提高从该集合中查找元素的效率,这种方式将集合分成若干个存储区域(可以看成一个个桶),每个对象可以计算出一个哈希码,可以根据哈希码分组,每组分别对应某个存储