Re: 關於HashSet 加入重覆物件卻成功加入的問題

看板java作者時間19年前 (2006/04/27 21:33), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/9 (看更多)
※ 引述《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)
文章代碼(AID): #14KCWFzd (java)
討論串 (同標題文章)
文章代碼(AID): #14KCWFzd (java)