Re: 關於HashSet 加入重覆物件卻成功加入的問題
※ 引述《qrtt1 (隱者)》之銘言:
: ※ 引述《Jnaive (嘿嘿)》之銘言:
: : 在head first java 那本書上看到過這問題
: : class A 還需要overrinding過另一個hashCode()這個method
: : 物件相等,似乎是先檢查物件的hashCode,然後才呼叫equal
: : 都相等,才算物件相等
: : 不是很確定…有錯請指正
: import java.util.HashSet;
: public class TasteHashSet {
: public static void main(String[] args) {
: Object o = new Object() {
: public int hashCode() {
: System.out.println("Call hashCode()");
: return super.hashCode();
: }
: public boolean equals(Object obj) {
: System.out.println("Call equals()");
: return super.equals(obj);
: }
: };
: HashSet hash = new HashSet() {
: public boolean add(Object o) {
: System.out.println("Do Add A Element");
: return super.add(o);
: }
: };
: hash.add(o);
: }
: }
: 俺好奇到底誰先呼叫, 是equals還是hashCode
: 寫了程式測了一下, 結果..hahaha
:) 我測了一下 當插入第一個element的時候 只會call 到hashcode()
之後每次插入element時
hashcode() 跟equals(Object)都會 call到
equals回傳true 且hashcode()傳出相同整數時候
HashSet才會視作相同物件
謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.107.75
※ 編輯: Bluesky7 來自: 140.112.107.75 (04/27 21:37)
※ 編輯: Bluesky7 來自: 140.112.107.75 (04/27 21:39)
※ 編輯: Bluesky7 來自: 140.112.107.75 (04/27 21:40)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 9 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章