为什么重写HashCode()和equal()
生活随笔
收集整理的這篇文章主要介紹了
为什么重写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()的全部內容,希望文章能夠幫你解決所遇到的問題。