equals+hashcode
答:equals()方法则是在HashMap中插入值或查询时会使用到。当HashMap中插入值或查询值对应的散列码与数组中的散列码相等时,则会通过equals方法比较key值是否相等,所以想以自建对象作为HashMap的key,必须重写该对象继承object的hashCode和equals方法。 2.本来不就有hashcode()和equals()了么?干嘛要重写,直...
答:【答案】:对。如果对象要保存在HashSet 或HashMap 中,它们的equals 相等,那么,它们的hashcode 值 就必须相等。如果不是要保存在HashSet 或HashMap,则与hashcode 没有什么关系了,这时候hashcode 不等是可以的,例如arrayList 存储的对象就不用实现hashcode,当然,我们没有理由不实 现,通常都会去...
答:一个标准的实体类的4大基本规则:1.封装(属性私有化,分别提供对应的get与set方法等),2、提供无参构造,3、重写:toString,equals,hashCode这3个方法,4、实现java.io.Serializable接口。所以java要判断两个对象是否相等。先说equals,重写它就是为了以后比较对象是否相等,比如你问题中的假如父类是...
答:在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。为何会有这样的要求?在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复。如果重写equals后,如果不重写hashcode,则hashcode就...
答:1、重写equals方法时需要重写hashCode方法,主要是针对Map、Set等集合类型的使用;a: Map、Set等集合类型存放的对象必须是唯一的;b: 集合类判断两个对象是否相等,是先判断equals是否相等,如果equals返回TRUE,还要再判断HashCode返回值是否ture,只有两者都返回ture,才认为该两个对象是相等的。2、由于Object...
答:因为如果不这样做的话,就会违反Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap、HashSet和Hashtable。另外在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始终如一地...
答:你说的那两种 都有可能相同 所以hashCode()是不可靠的!那它不可靠为什么还要用它?因为它计算起来快啊!这涉及到两个对象之间的比较 1.equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不...
答: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,比较的还是引用,与==相同...
答:因为java的collection很多都需要hashCode(),例如HashTable 比如说你往里面存了一个值,你在取这个值的时候,java实际上通过hashCode()来找那个值,因为这样通常比较快。如果你覆盖了equals()方法,意味着原来不相等的两个对象现在可能变得相等,但hashCode()的值却不相等,这样你使用HashTable就会出现存进去...
网友评论:
里盛13236108943:
Java中equals和 hashcode的用法 -
47106洪伦
: hashcode 一般用来表示对象的唯一性.比如你在使用 hashset的时候,hashset是一个集合,而集合中的元素必须是唯一的,所以你向hashset中添加对象时,必须确保每个对象的hashcode是不同的.equals 的一般实现是通过比较对象的...
里盛13236108943:
Java对象的equals和hashCode的使用是什么?
47106洪伦
: Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个.在多数情况下,这两个函数是不用考虑的,直接...
里盛13236108943:
java里equals和hashcode之间什么关系 -
47106洪伦
: 这个从头说起:在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据.基本数据类型在"栈"中存的是其内容值,对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象. java.lang包中的Object类有...
里盛13236108943:
java中的equals方法和hashcode的区别 -
47106洪伦
: 共同点:两个方法,都直属Object麾下(也就是说,只有对象才有的方法); 还有就是在自定义对象的时候都建议重写这两个方法(为什么重写,用处太多,比如学了集合以后你就知道了) 不同点:equals方法主要是用来比较两个对象是否相同..返回的是一个布尔值!hashcode是系统环境底层根据哈希算法返回对象的一个int类型哈希值,通常用来确保对象唯一性!对于部分集合来说,直接依赖这二个方法!(可以根据实际需求不同,重写两个方法) 解释的不好,还请指点!
里盛13236108943:
equals和hashcode谁的效率更高?为什么?谢谢解答 -
47106洪伦
: 其实不能说谁比谁高,是hashcode+equals 效率最高 比如在hashset中,已经有1000个数据 如果只用equals,插入第1001个数据时,需要依次和前1000个比 如果用hashcode,可将前面数据的范围缩小(不同对象的hashcode可能相等),这样如果hashcode如果不同,直接false,相同时调用equals方法进一步确认
里盛13236108943:
equals 为什么 hashcode -
47106洪伦
: 为啥很多地方说“覆写equals的时候一定要覆写hashCode”.说到这里我知道很多人知道有个原则:如果a.equals(b)那么要确保a.hashCode()==b.hashCode().为什么?hashCode和我写的程序的业务逻辑毫无关系,为啥我要override? 要我说...
里盛13236108943:
JAVA 关于 equals 方法 和 hashCode方法 -
47106洪伦
: 你new的是HashSet(),看名字也能联想到吧,比较HashSet里的东西,除了要equals()返回true之外,还要hashCode()返回值相同,才认为两个数据是相同的,在你的程序里就表现为,移除掉一个相同的数据.HashSet就是照hash算法写...
里盛13236108943:
Java中==和equals的区别,equals和hashCode的区别 -
47106洪伦
: 如果一个类没有重写Object的equals方法,那么默认采用Object的equals方法,底层还是比较对象的地址.即内存的对象地址是否一致.String因为重写了equals方法,比较的是字符串的内容.hashCode是计算对象的散列码的方法.就是根据对象来生成一个字符串的,不同的对象有可能会相同.
里盛13236108943:
hash code、equals和“==”三者的关系 -
47106洪伦
: 1.如果是基本变量,没有hashcode和equals方法,基本变量的比较方式就只有==;2.如果是变量,由于在java中所有变量定义都是一个指向实际存储的一个句柄(你可以理解为c++中的指针),在这里==是比较句柄的地址(你可以理解为指针的...
里盛13236108943:
HashCode和equals -
47106洪伦
: EQUALS比较的是内存地址,HASHCODE是根据内存地址计算出来的,EQUALS相等了,HASHCODE一定相等,反过来HASHCODE相等了,EQUALS不一定相等.