2015-03-03 73 views
1

我不太明白我應該傳遞給contains()方法的參數。我有我自己的名爲Name的類,它由2個字符串(firstName,secondName)組成。我創建了一個Name類型的ArrayList和兩個同名的Name對象,例如。(「喬‘布羅格斯’)2倍那麼paremeters做我必須要通過檢查它是否工作我已經正確地重寫爲Name類equals方法這是我的主要程序:我應該爲contains()方法使用哪些參數?

import java.util.ArrayList; 

public class EqualsTest { 

    public static void main(String[] args) { 

     ArrayList<Name> names = new ArrayList<Name>(); 

     names.add(new Name("Joe", "Bloggs")); 
     names.add(new Name("John", "Smith")); //<-- 
     names.add(new Name("Alan", "Wake")); // | the same name 
     names.add(new Name("Robert", "High"));// | 
     names.add(new Name("John", "Smith")); //--- 

     names.contains(Name("Joe", "Bloggs"));  
    } 
} 
+0

您正確使用了add方法,但您對包含的問題儘管它們採用相同的參數(一個採用對象而不是您的List的一般類型)。 – 2015-03-03 12:19:29

回答

7

假設你「ve在Name類正確覆蓋equals,它應該是:

if (names.contains(new Name("Joe", "Bloggs"))) { 
    ... 
} 
+0

謝謝你。我的最後一個問題是,爲什麼我必須在名稱旁邊包含「new」,即使我調用方法時也是如此。我知道我必須在數組中創建一個新對象的時候這麼做。 – Lazio 2015-03-03 12:20:06

+1

@Lazio您應該將'Name'的實例傳遞給contains方法,因爲名稱列表包含'Name'實例。你用一個構造函數調用創建一個Name實例,它需要「new」。 – Eran 2015-03-03 12:21:49

+0

再次感謝你:)祝你有美好的一天。 – Lazio 2015-03-03 12:23:44

2

您可以使用

names.contains(new Name("Joe", "Bloggs")); 

但你應該重寫在Name類中的210方法按預期工作。

當您需要處理Java中的收集框架工作時,最好在您的課程中覆蓋equals()hashCode()方法,否則您最終會遇到混亂。

+1

它與其他答案類似! – Prashant 2015-03-03 12:17:29

+0

@Prashant是嗎?這對某些人來說會有困難嗎?我想你可以在我的回答中看到其他一些觀點。 – 2015-03-03 12:17:58

+1

如果你正在給一些不同的方法,那麼它的罰款,否則簡單地投票了以前的答案!那是我的意思。 – Prashant 2015-03-03 12:20:36

相關問題