2013-04-14 3 views
-1
import java.util; 
class Driver{ 

public static void main(String[] args) { 
     ArrayList<String> lstStr = new ArrayList<String>(); 
     lsstStr.add("A"); 
     lsstStr.add("B"); 
     lsstStr.add("C"); 
     for(Iterator<String> it = lstStr.Iterator(); it.hasNext();) 
     { 
      str = it.next(); 
      if(str.equals("B")){lstStr.remove(str);} 
     } 
     for(Iterator<String> it = lstStr.Iterator(); it.hasNext();) 
     { 
     System.out.println(it.next()); 
     } 
} 
} 

Это не удаляет из списка «B». Почему Str не равна «B», когда цикл работает второй раз. Почему?Не удалось удалить из ArrayList

+1

Ваш код в настоящее время не компилируется, поэтому он ничего не покажет. Пожалуйста, дайте пример, который компилируется, во-первых. Вы явно не используете код, который вы разместили, поэтому мы не знаем, какой код на самом деле * работает. –

+0

Этот код приведет к исключению параллельной модификации, так как итератор станет непригодным после удаления элемента из коллекции. Вы не говорите нам об этом, возможно, вы даже не пробовали. – h22

ответ

4

Вы не можете удалить элемент из коллекции вы Перебор кроме с помощью Iterator.remove - вы получите ConcurrentModificationException. Таким образом, ваш цикл будет что-то вроде:

for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { 
    String value = iterator.next(); 
    if (value.equals("B")) { 
     iterator.remove(); 
    } 
} 

Конечно, вы должны использовать removeAll для только удалить все элементы с определенным значением - но выше подход является один использовать, если вам нужно удалить на основе другое условие, отличное от простого равенства (например, «удалить все значения с длиной больше 5». Другой вариант - собрать все значения для удаления в новой коллекции, а затем позвонить removeAll.

3

Попробуйте это: он удалит все случаи появления «B» из вашего списка без какого-либо цикла.

lstStr.removeAll(Collections.singleton("B")); 
+0

импорт java.util. *; класс Drive { public static void main (String [] args) { ArrayList lstStr = new ArrayList (); lstStr.add ("A"); lstStr.add ("R"); lstStr.add ("C"); String str; для (Итератор it = lstStr.iterator(); it.hasNext();) {\t \t str = it.next(); , если (str.equals ("R")) {lstStr.remove (он);}} для (Iterator он = lstStr.iterator(); it.hasNext();) { System.out. Println (it.next()); } } } – Brometheus

+1

@Brometheus: Пожалуйста, не добавляйте код в комментарии, подобные этому - особенно без указания каких-либо * почему * вы это делаете. Если вы хотите изменить свой вопрос (который вам нужно - чтобы он скомпилировался, если ничего больше), вы должны отредактировать вопрос, а не добавлять бессмысленные комментарии к ответам или задавать новый вопрос в отдельном сообщении. –

0

Используйте метод итератора remove , Который удалит элемент из коллекции.

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