2015-07-14 2 views
-7

Я выполнил программу. После удаления объекта из списка отображается другой список.Почему объект удаляется после использования метода removeAll

public class Testing { 

    public static void main(String args[]) { 
     ArrayList a1 = new ArrayList<>(); 
     a1.add("a"); 
     a1.add("e"); 
     a1.add("f"); 
     ArrayList a2 = new ArrayList<>(); 
     a2.add("a"); 
     a2.add("x"); 
     a2.add("y"); 

     a1.removeAll(a2); 
     Iterator<String> it = a1.iterator(); 
     while (it.hasNext()) { 
      System.out.println(it.next()); 
     } 
    } 

И выход я получаю: е, е

Почему 'а' удалены?

+1

Вы читали javadoc? –

+1

Как вы думаете, 'removeAll' делает? Почему вы думаете, что 'a' не следует удалять? –

+0

Вы ожидали, что 'removeAll' ничего не сделает? Если это то, чего вы ожидали, почему вы это вообще назвали? – Eran

ответ

2

Потому что вы позвонили a1.removeAll(a2), возможно?

http://docs.oracle.com/javase/7/docs/api/java/util/List.html#removeAll%28java.util.Collection%29

Удаляет из этого списка все его элементы, которые содержатся в указанном наборе (дополнительная работа).

Так, другими словами, каждый элемент, который находится в a2, а также в a1 будут удалены из a1.

+0

Я согласился ... Итак, это означает, что a1 и a2 оба ссылаются на один и тот же элемент 'a' ? –

+1

@LittleBird Нет, это не так, вы удаляете его из 'a1' NOT из' a2'. Попробуйте выполнить итерацию над 'a2', вы увидите, что элемент 'a' все еще там. –

0

a1.removeAll - это метод, который может принимать другой массив. Вот как вы его используете. Он может удалить все вхождения этого другого массива из текущего массива. В вашем примере a1 имеет значение ["a", "e", "f"], а a2 имеет значение ["a", "x", "y"]. a1.removeAll (a2) попытается удалить все значения, содержащиеся в a2, из a1. Поскольку «a» - значение в a2, оно удаляется из a1.

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