課程
/后端開發
/Java
/Java入門第三季
什么時候要重寫hashcode什么時候不要呢?
2016-08-13
源自:Java入門第三季 6-4
正在回答
跟哈希表有關的集合基本都要重寫,如果不重寫的話,調用的是Object的hashCode方法(返回的是堆中對象的地址,即棧中的引用變量存儲的值)。
舉個例子:
假設Student類中有2個成員變量:年齡,姓名。
然后main方法定義一個HashSet集合用來存儲Stundent對象(假定我們查詢的時候利用名字不同來判斷對象不同)
然后有這樣3個對象(3個學生) ? ?{“小明”,19歲}。{“小紅”, 20歲}。{“小明”,7歲}。
當把這3個對象依次放進HashSet集合時,HashSet集合將會先判斷hashCode值是否一樣,如果不重寫HashCode方法,則返回的是這3個對象的地址,那么???{“小明”,19歲},{“小明”,7歲}都被加了集合中。姓名就重復了,這違反了Hash表的宗旨。Hash表要求每個元素的hashCode都需要不一樣的,所以這個時候就需要重寫HashCode方法與equals方法,使得{“小明”,19歲}與{“小明”,7歲}的hashCode值一樣,equals方法返回true,這樣這2個小明就不會被添加進去了。
記住就行:基本上跟哈希表有關的集合基本都要重寫hashCode方法與equals()方法。比如HashSet,HashMap,LinkedHashSet......
紫_羽 提問者
慕粉4279355
Sean_Chou
java?里有個超類,就是所有的類都繼承至那個類,叫Object。這個知道不?這個類有equals和hashCode方法,所以你要做一些你自定義的比較,你就要重寫這些方法。
比如你知道Set這個集合是不能存相同內容的嗎?它判斷相同內容的依據就是存進去的這個對象與set這個集合里面存在的各個對象的hashcode比較是否相同。如果相同,就存不進去。
舉報
Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧
3 回答關于hashcode()的問題
1 回答equals和hashCode重寫問題
1 回答hashcode()方法
1 回答hashcode方法重寫的疑問
2 回答關于輸出結果是hashcode
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-08-14
跟哈希表有關的集合基本都要重寫,如果不重寫的話,調用的是Object的hashCode方法(返回的是堆中對象的地址,即棧中的引用變量存儲的值)。
舉個例子:
假設Student類中有2個成員變量:年齡,姓名。
然后main方法定義一個HashSet集合用來存儲Stundent對象(假定我們查詢的時候利用名字不同來判斷對象不同)
然后有這樣3個對象(3個學生) ? ?{“小明”,19歲}。{“小紅”, 20歲}。{“小明”,7歲}。
當把這3個對象依次放進HashSet集合時,HashSet集合將會先判斷hashCode值是否一樣,如果不重寫HashCode方法,則返回的是這3個對象的地址,那么???{“小明”,19歲},{“小明”,7歲}都被加了集合中。姓名就重復了,這違反了Hash表的宗旨。Hash表要求每個元素的hashCode都需要不一樣的,所以這個時候就需要重寫HashCode方法與equals方法,使得{“小明”,19歲}與{“小明”,7歲}的hashCode值一樣,equals方法返回true,這樣這2個小明就不會被添加進去了。
記住就行:基本上跟哈希表有關的集合基本都要重寫hashCode方法與equals()方法。比如HashSet,HashMap,LinkedHashSet......
2016-08-13
java?里有個超類,就是所有的類都繼承至那個類,叫Object。這個知道不?這個類有equals和hashCode方法,所以你要做一些你自定義的比較,你就要重寫這些方法。
比如你知道Set這個集合是不能存相同內容的嗎?它判斷相同內容的依據就是存進去的這個對象與set這個集合里面存在的各個對象的hashcode比較是否相同。如果相同,就存不進去。