2013-02-11 86 views
0

我有團隊ArrayList類,我想刪除團隊名稱是「免費」;如何從arraylist中刪除對象

所以我嘗試:

public void removeFree() 
{ 

    for (int i = 0 ; i < numberOfTeams ; i++) 
    { 
     if (this.getListOfTeams().get(i).getName() == "FREE") 
     { 
      this.getListOfTeams().remove(i); 
     } 
     else 
     {} 
    } 
} 

這讓我的應用程序崩潰。

回答

3

使用equals()方法檢查兩個字符串是否有意義相等。 ==運算符只檢查兩個引用變量是否引用同一個對象。

if (this.getListOfTeams().get(i).getName() == "FREE") 

應該

if (this.getListOfTeams().get(i).getName().equals("FREE")) 

而且添加更多的,即使您使用equals()方法,你會得到ConcurrentModificationException如要刪除從ArrayList中的元素,同時遍歷它。您必須使用迭代器並從中刪除元素。

Iterator<Team> itr = getListOfTeams.iterator(); 
while(itr.hasNext()){ 
    if (itr.next().getName().equals("FREE")) 
     { 
      itr.remove(); 
     } 
     else 
     {} 
} 
} 
+0

它也可以幫助避免NPE在文字字符串'「FREE」'上調用'equals()'。 – 2013-02-11 10:56:48

0

您試圖在循環同一個ArrayList時刪除一個項目。您需要先克隆,迭代克隆的列表,然後刪除第一個指針的項目。

這樣考慮這個問題:

List<Object> arrayToIterate = getListOfTeams().clone(); 
for (int i = 0 ; i < numberOfTeams ; i++) 
{ 
    if (tarrayToIterate.get(i).getName().equals("FREE")) 
    { 
     this.getListOfTeams().remove(i); 
    } 
    else 
    {} 
} 

而且你用==,而不是比較平等的字符串。

2

要在迭代它刪除從List一個元素,它的安全與remove方法一起使用Iterator

for (Iterator it = getListOfTeams().iterator;it.hasNext();) { 
    String name = it.next(); 
    if ("FREE".equals(name) { 
     it.remove(); 
    } 
    else{} 
} 

請注意如何在Java String值比較通常應該通過的方式來完成String.equals()方法。 ==是參考相等運算符。請參閱How do I compare strings in Java?

+0

我認爲你在for循環中有一個錯誤。不應該'it.hasNext()'成爲條件,而不是更新? – jlordo 2013-02-11 11:02:45