2013-05-03 81 views
1

有人可以告訴我由我的導師提供的代碼中的以下行應該做什麼?查找ArrayList中的重複項

if (data.contains(entry)) 

全部方法:

public String add(Entry entry) { 
    if (entry == null) 
     return "Error: null entry"; 
    if (data.contains(entry)) 
     return "Error: this entry already in the book"; 

    boolean done = data.add(entry);  
    if (done) 
     return " entry added"; 
    else 
     return "entry could not be added"; 
    } 

我以爲是檢查使用相同的細節在ArrayList中的現有條目,但是當我添加一個重複的條目它不進入這樣想通if聲明我假定錯了?我在互聯網上搜索,它說這是爲了這個目的,爲什麼它不適合我?

+0

你試圖比較對象的,如果外面,看是否是相同的(使用equals方法) ? http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#contains(java.lang.Object) – lcguida 2013-05-03 14:02:55

+0

@rockskull沒有對這個類中的方法做任何事情,因爲我們無論如何都無法修改它。我們已經擴展了創建地址簿的類。他一定是想讓我們以某種方式使用它,否則他們爲什麼要把它放在那裏呢? – ToniHopkins 2013-05-03 14:08:08

+0

另外,值得指出的是,從Java方法返回字符串狀態是不正常的。相反,如果你沒有有意義的返回值,那麼它就是一個「空白」方法。如果出現問題,請拋出異常。 – 2013-05-03 14:16:59

回答

6

記住執行與equals()相等性檢查。所以除非你的對象覆蓋了這個方法,否則它不會認爲對象是平等的,除非它們是相同的對象引用。

當然,不要覆蓋equals()而不會覆蓋hashCode()

最後,如果您不想重複使用對象,請考慮使用Set

+1

爲了澄清,如果你沒有重載'equals',兩個非原始對象的實例永遠不會被認爲是相等的(因爲它使用實例),因此'contains'將始終返回false。 – 2013-05-03 14:04:03

+0

@DuncanJones無論如何我不能修改這個方法(任何類的事情),這是否意味着它沒有任何目的,如果它沒有實際檢查重複條目? Appologies im new to java – ToniHopkins 2013-05-03 14:14:30

+0

@ToniHopkins爲了清楚起見,你能編輯'Entry'類嗎? – 2013-05-03 14:15:41

1

檢查的equals()和hashCode()

0

列表的方法,您將看到它使用equals()方法來評估兩個對象是否相同。

內部邏輯as per docs

(o==null ? e==null : o.equals(e)); 

所以,你必須ovverideequals方法compare他們