2013-07-15 2 views
-1

Как удалить элементы списка массивов 1, которые доступны из списка массивов 2?Удалить элементы из массиваList1, которые доступны в arraylist2

, например

ArrayList<AClass> list1 = new ArrayList<AClass>(); //AClass(int IDNumber, String date) 
ArrayList<Integer> list2 = new ArrayList<Integer>(); 

AClass a1 = new AClass(1, "20/01/2013"); 
AClass a2 = new AClass(2, "21/01/2013"); 
AClass a3 = new AClass(3, "22/01/2013"); 
AClass a4 = new AClass(4, "23/01/2013"); 

list1.add(a1); 
list1.add(a2); 
list1.add(a3); 
list1.add(a4); 

list2.add(2); 
list2.add(4); 

//remove 2 and 4 from list1, 

размер списков будет большой, есть ли методы или алгоритмы, чтобы удалить их.

Im, ожидая ответа на вопрос

// after removing Im expecting answer from list1 as 
[1,22/01/2013] 
[3,22/01/2013] 

ответ

2

Использовать , а не List<Integer>, а затем итерацию по list1, и удалить каждый элемент, который имеет Num, содержащийся в Set<Integer>:

for (Iterator<AClass> it = list1.iterator(); it.hasNext();) { 
    AClass c = it.next(); 
    if (set.contains(c.getNum())) { 
     it.remove(); 
    } 
} 

A HashSet lookup - O (1), тогда как поиск списка - O (N).

+1

Я думаю, что OP пытается удалить элементы с индексами 2 и 4. HashSet не позволит ему это сделать. В его примере нет повторяющихся значений. – ARRG

+2

Нет. Он пытается удалить элемент, который имеет в своем поле num значение, которое находится во второй коллекции: * «Как удалить элементы списка массивов 1, которые доступны из списка массивов 2?» *. Кстати, в его примере нет индекса 4. –

+0

На самом деле после повторного чтения его пример не имеет смысла (даже не компилируется). Он использует 'add (index, E item)', который вызвал мой комментарий выше, но вы правы, что это, возможно, не то, что он имел в виду. – ARRG