如何从数组列表2中删除可用的数组列表1的元素?
例如
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,
列表的大小会很大,是否有任何方法或算法可以删除它们。
我期待回答
// after removing Im expecting answer from list1 as
[1,22/01/2013]
[3,22/01/2013]
答案 0 :(得分:2)
使用HashSet<Integer>
而不是List<Integer>
,然后遍历list1
,并删除Set<Integer>
中包含num的每个元素:
for (Iterator<AClass> it = list1.iterator(); it.hasNext(); ) {
AClass c = it.next();
if (set.contains(c.getNum())) {
it.remove();
}
}
HashSet查找是O(1),而List查找是O(N)。