作者Bluesky7 ()
看板java
标题Re: 关於HashSet 加入重覆物件却成功加入的问题
时间Thu Apr 27 21:35:43 2006
※ 引述《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)