2013-02-11 2 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")) 

Кроме того, чтобы добавить больше, даже если вы используете равных() вы получите ConcurrentModificationException, как вы удаляете элементы из ArrayList в то время как итерация над ним. вам нужно использовать итератор и удалять из него элементы.

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

Это также может помочь избежать использования NPE 'equals()' в литеральной строке '' FREE''. –

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 в то время как итерация, он безопаснее использовать Iterator вместе с remove способом:

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

Обратите внимание, как сравнения значений строк в Java, как правило, должно быть сделано с помощью String.equals() способ. == - оператор ссылочного равенства. См. How do I compare strings in Java?

+0

Я думаю, что у вас есть ошибка в вашем цикле 'for'. Должно ли 'it.hasNext()' быть условием, а не обновлением? – jlordo

Смежные вопросы