欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

为什么重写HashCode()和equal()

发布时间:2024/2/28 26 豆豆
生活随笔 收集整理的这篇文章主要介绍了 为什么重写HashCode()和equal() 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

先揭晓答案:重写这俩个方法是为了在使用HashMap 传入自定义Key时,HashMap还能根据需求正常使用。

现在有这样的需求:根据Key的属性返回value。

不重写会怎样,来看代码

class Key{int i;Key(int i){this.i=i;} } public class DefineKey {public static void main(String[] args) {// TODO Auto-generated method stubKey key1=new Key(1);Key key2=new Key(1);HashMap<Key,Integer> map=new HashMap<>();map.put(key1, 1);System.out.println(map.get(key2));} }//执行结果 为 null

那么只重写HashCode()呢?

import java.util.HashMap; class Key{Integer i;Key(int i){this.i=i;}@Overridepublic int hashCode() {// TODO Auto-generated method stubreturn i.hashCode();} } public class DefineKey {public static void main(String[] args) {// TODO Auto-generated method stubKey key1=new Key(1);Key key2=new Key(1);HashMap<Key,Integer> map=new HashMap<>();map.put(key1, 1);System.out.println(map.get(key2));} } // 还是null, 虽然 get(key2) 找到了 key1所在桶 但父类的equal方法对于俩个对象还是不等的

重写俩个方法呢??

class Key{Integer i;Key(int i){this.i=i;}@Overridepublic int hashCode() {// TODO Auto-generated method stubreturn i.hashCode();}@Overridepublic boolean equals(Object obj) {// TODO Auto-generated method stubKey key=(Key)obj;return this.i==key.i;} } public class DefineKey {public static void main(String[] args) {// TODO Auto-generated method stubKey key1=new Key(1);Key key2=new Key(1);HashMap<Key,Integer> map=new HashMap<>();map.put(key1, 1);System.out.println(map.get(key2));} }

这样的话 就返回 1 了

总结

以上是生活随笔为你收集整理的为什么重写HashCode()和equal()的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。