【问题标题】:why list1.removeAll(list2) remove all the duplicates elements not the number of occurrence in list2为什么 list1.removeAll(list2) 删除所有重复元素而不是 list2 中的出现次数
【发布时间】:2018-07-07 10:52:56
【问题描述】:

我创建了两个整数数组列表。 List1 包含 [1, 2, 2, 2, 5],List2 包含 [2]。我试过 List1.removeAll(List2) 应该只从 List1 中删除 2 一次,而不是从 List1 中删除所有出现的 2。 而且 List1.remove(List2) 根本不起作用。

public static void main(String[] args) {
        ArrayList<Integer> list1 = new ArrayList<>();
        list1.add(2);
        list1.add(5);
        list1.add(1);
        list1.add(2);
        list1.add(2);
        Collections.sort(list1);
        System.out.println(list1);
        ArrayList<Integer> list2 = new ArrayList<>();
        list2.add(2);
        list1.removeAll(list2);
        System.out.println(list1);
}

Expected OUTPUT - [1, 2, 2, 2, 5]
                  [1, 2, 2, 5]

Actual OUTPUT - [1, 2, 2, 2, 5]
                [1, 5]

【问题讨论】:

  • 应该只从 List1 中删除 2 一次,而不是删除所有出现的事件 根据谁或什么?
  • 因为这是它应该做的,根据它的规范,你可以在 javadoc 中阅读。
  • 仅供参考,这是文档:docs.oracle.com/javase/8/docs/api/java/util/…

标签: java list removeall


【解决方案1】:

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

没有。 List1.removeAll(List2) 删除所有出现的 List2(from List1) 因为这是 documented 要做的:

boolean removeAll(集合 c)

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

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

布尔删除(对象o)

从该列表中删除第一个出现的指定元素(如果存在)(可选操作)。如果此列表不包含该元素,则它保持不变。

【讨论】:

  • @MunauwarShaikh 如果回答了您的问题,请接受答案。 :)
【解决方案2】:

如果您想删除 first 匹配项(如链接的 Javadoc 中所述),则需要 List.remove(Object)List.removeAll(Collection&lt;?&gt;) 删除所有匹配项。您还可以使用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]

【讨论】:

  • 还有其他方法可以做到这一点。如果我不想使用 list2 上的每个循环?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
相关资源
最近更新 更多