当前位置:
首页 >
为什么重写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()的全部内容,希望文章能够帮你解决所遇到的问题。