为什么list1.removeAll(list2)删除所有重复元素而不是list2中出现的次数

时间:2018-01-28 17:46:54

标签: java list removeall

我创建了两个Integer的ArrayList。 List1包含[1,2,2,2,5],List2包含[2]。我尝试过List1.removeAll(List2)应该只从List1中删除2,而不是从List1中删除所有出现的2。 此外,List1.remove(List2)根本不起作用。

sendTwitterRequest:completion:

2 个答案:

答案 0 :(得分:2)

  

我尝试过List1.removeAll(List2)应该只从List1删除2次,而不是从List1中删除所有出现的2

没有。 List1.removeAll(List2)删除所有出现的List2(来自List1),因为它是documented要执行的操作:

  

boolean removeAll(Collection c)

     

从此列表中删除指定集合中包含的所有元素(可选操作)。

如果您只想删除第一个元素,则应该使用List.remove(object)。以下是来自doc的参考:

  

boolean remove(Object o)

     

从此列表中删除第一次出现的指定元素(如果存在)(可选操作)。如果此列表不包含该元素,则不会更改。

答案 1 :(得分:1)

如果要删除第一个匹配项,则需要List.remove(Object)(如链接的Javadoc中所述)。 List.removeAll(Collection<?>)删除所有匹配项。您还可以使用IntStream构建List(s),并使用List(而不是特定的 ArrayList实施)。像,

List<Integer> list1 = IntStream.of(2, 5, 1, 2, 2).boxed().collect(Collectors.toList());
Collections.sort(list1);
System.out.println(list1);
List<Integer> list2 = IntStream.of(2).boxed().collect(Collectors.toList());
for (Integer v : list2) {
    list1.remove(v);
}
System.out.println(list1);

哪个输出

[1, 2, 2, 2, 5]
[1, 2, 2, 5]