2013-04-22 89 views
0

大家好!我已經與這個項目合作以保持棒球賽季的紀錄,並且我用我的ArrayList用法面對這個問題:Java; ArrayList <T> indexof

。 。 。

private ArrayList<Team> list1 = new ArrayList<Team>(); 

Team something = new Team("Somename"); 
Team somethingelse = new Team("Someothername"); 

,然後我用了一些制定者想:

something.setPoints(1); 
somethingelse.setPoints(2); 

然後:

list1.add(something); 
list1.add(somethingelse); 

但在這裏,問題來了:

int help1 = list1.indexOf(something); 
System.out.println(help1); 

返回-1

但列表中包含的那些對象:

for (Team d: list1) { 
     System.out.println(d); 
} 

輸出是的toString() - 方法我寫信給Team類...

,然後我

ArrayList<Integer> list2 = new ArrayList<Integer>(); 

list2.add(1); 

list2.add(2); 

int help2 = list2.indexOf(1); 
System.out.println(help2); 
試了一下

返回0

所以基本上我所要求的是,當列表中包含具有m的對象時,使用indexOf的正確方法多重值?

回答

3

您需要覆蓋Team類中的equals方法。所以當你做list1.indexOf(something);時,indexOf方法知道如何找到對象something

+1

無論何時重寫均等考慮覆蓋hashcode方法 – 2013-04-22 11:50:52

2

你需要重寫散列碼和等於Team類!

+2

對於ArrayList,Hashcode不是必需的,但如果覆蓋兩者,則優先考慮覆蓋兩者。 – Dariusz 2013-04-22 11:51:21

+0

無論您是使用arraylist還是hashmap,您的類規範都必須正確無誤。爲進一步閱讀參考有效的Java項目9:當您覆蓋等於時總是覆蓋hashCode – 2013-04-22 12:31:24

1

按的indexOf

了Java文檔返回指定元素中第一次出現的索引 此列表,或-1,如果此列表中不包含的元素。更多 正式返回最低索引i,使得(o == null?get(i)== null :o.equals(get(i)))或-1(如果沒有這樣的索引)。

所以你基本上是需要override,不管你想匹配的equals()方法,例如:

@Override 
public boolean equals(object obj) 
{ 
    if(obj instanceof Team) 
    { 
      Team t = (Team) obj; 
      return t.getName().equals(this.getName()); 
    } 
    return false; 

} 

此代碼是未經測試,但它應該做你所需要的。在這種情況下,如果他們有相同的名字,我認爲兩個球隊是平等的。

0

如果something對象是相同例如全部通過你的榜樣,一切都應該是很好的,因爲Object.equals正在被使用,它返回相同的實例如此。

但是,如果您正在創建具有相同值和全部的另一個對象,Object.equals將返回false。您需要實施考慮您的對象字段的方法equalshashCode

相關問題