hashcode和equals的关系
答:你说的那两种 都有可能相同 所以hashCode()是不可靠的!那它不可靠为什么还要用它?因为它计算起来快啊!这涉及到两个对象之间的比较 1.equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不...
答:1、重写equals方法时需要重写hashCode方法,主要是针对Map、Set等集合类型的使用;a: Map、Set等集合类型存放的对象必须是唯一的;b: 集合类判断两个对象是否相等,是先判断equals是否相等,如果equals返回TRUE,还要再判断HashCode返回值是否ture,只有两者都返回ture,才认为该两个对象是相等的。2、由于Object...
答:在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。为何会有这样的要求?在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复。如果重写equals后,如果不重写hashcode,则hashcode就...
答:因为如果不这样做的话,就会违反Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap、HashSet和Hashtable。另外在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始终如一地...
答:返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。hashCode 的常规协定是:在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次...
答:3、 为什么equals()相等,hashCode就一定要相等,而hashCode相等,却不要求equals相等? 答案: - 因为是按照hashCode来访问小内存块,所以hashCode必须相等。 - HashMap获取一个对象是比较key的hashCode相等和equal为true。 之所以hashCode相等,却可以equal不等,就比如ObjectA和ObjectB他们都有属性name,那么hashCode都以name计...
答:==是比较两个变量是否引用的同一个对象,与是否重写了hashCode或equals无关。因为图中p1和p2引用的是两个对象,==比较的结果当然是false。如果将第2行改成:people p2=p1;==的结果就是true了。如果要比较值是否相等,得重写equals方法(如果直接使用从Object类继承的equals,比较的还是引用,与==相同...
答:如果你重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。这样,当你用其中的一个作为键保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一个作为键值去查找他们的时候,则根本找不到。如果两个对象的堆内存...
答:若是自定义类,一定要重新equals与hashCode方法,满足上述hashCode的2个关系。例如自己的User类有name和pass,一个简单的方案如下:public class User{ String name,pass;//get/set...public int hashCode() { return name.hashCode + pass.hashCode();} public boolean equals(Object o) { if(o in...
答:但hashCode()的值却不相等,这样你使用HashTable就会出现存进去的东西找不到。不要忽略这个问题,因为HashTable等等类用的非常多,很可能就在一个你不知道的地方间接地用到了。java类的一个原则就是:你定义的任何类,都要考虑覆盖equals和hashCode方法。否则你的类就不能给其他人或其他地方用。
网友评论:
徒常14715832088:
java中的equals方法和hashcode的区别 -
5110柏伊
: 共同点:两个方法,都直属Object麾下(也就是说,只有对象才有的方法); 还有就是在自定义对象的时候都建议重写这两个方法(为什么重写,用处太多,比如学了集合以后你就知道了) 不同点:equals方法主要是用来比较两个对象是否相同..返回的是一个布尔值!hashcode是系统环境底层根据哈希算法返回对象的一个int类型哈希值,通常用来确保对象唯一性!对于部分集合来说,直接依赖这二个方法!(可以根据实际需求不同,重写两个方法) 解释的不好,还请指点!
徒常14715832088:
java里equals和hashCode之间什么关系 -
5110柏伊
: equals与hashcode的关系是:两个对象在equals相等的情况下,hashcode有可能相等也有可能不相等,而两个对象在hashcode不相等的情况下,equals也必定不相等.理解equals的应用:它是用于用户在进行对比的时候,这个时候对比的是内容...
徒常14715832088:
在Java中hashcode() 和equals()的区别,简练点
5110柏伊
: 默认情况下,也就是Object中定义的,equals返回的结果和直接用 == 操作符的结果一致,hashCode的结果对应于equals的结果.但是我们可以复写掉这两个方法,比如说: String s="asdf",s1=new String("asdf"); System.out.println(s.equals...
徒常14715832088:
Java中equals和 hashcode的用法 -
5110柏伊
: hashcode 一般用来表示对象的唯一性.比如你在使用 hashset的时候,hashset是一个集合,而集合中的元素必须是唯一的,所以你向hashset中添加对象时,必须确保每个对象的hashcode是不同的.equals 的一般实现是通过比较对象的...
徒常14715832088:
在Java中hashcode() 和equals()的区别,简练点 -
5110柏伊
: 重写equals方法的时候必须重写hashCode方法.如果一个类的两个对象,使用equals方法比较时,结果为true,那么该两个对象具有相同的hashCode.原因是equals方法为true,表明是同一个对象,它们的hashCode当然相同.Ojbect类的hashCode方法返回的是Object对象的内存地址.可以通过Integer.toHexString(new Object().hashCode);来得到.
徒常14715832088:
equals和hashcode的关系. -
5110柏伊
: 只是为了维护 hashCode 方法的常规协定,才要求用equals比较的两个对象的hashCode相同.equals()和hashCode()都来自java.lang.Object.你当然可以重写.比如a.equals(b).仅当a的内存地址相等时,才返回true.当然如String等类已经对...
徒常14715832088:
equals和hashcode谁的效率更高?为什么?谢谢解答 -
5110柏伊
: 其实不能说谁比谁高,是hashcode+equals 效率最高 比如在hashset中,已经有1000个数据 如果只用equals,插入第1001个数据时,需要依次和前1000个比 如果用hashcode,可将前面数据的范围缩小(不同对象的hashcode可能相等),这样如果hashcode如果不同,直接false,相同时调用equals方法进一步确认
徒常14715832088:
Java对象的equals和hashCode的使用是什么?
5110柏伊
: Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个.在多数情况下,这两个函数是不用考虑的,直接...
徒常14715832088:
hash code、equals和“==”三者的关系 -
5110柏伊
: 1.如果是基本变量,没有hashcode和equals方法,基本变量的比较方式就只有==;2.如果是变量,由于在java中所有变量定义都是一个指向实际存储的一个句柄(你可以理解为c++中的指针),在这里==是比较句柄的地址(你可以理解为指针的...
徒常14715832088:
java hascode和equals的关系?麻烦大神所得易懂点 -
5110柏伊
: 当比较2个实例变量是否是同一个对象时候,会先用equals比较是否相等,如果相等,再比较hashCode是否一致,如果一致就是同一个对象,如果不一致就是不同对象.示例:12345678910111213141516171819 public class Student { //定义一...