Java 中 CollectionUtils.subtract() 和 List.removeAll() 方法求差集的区别

CollectionUtils.subtract() 和 List.removeAll() 方法都可以求差集,但是结果是不一样的。

测试方法

 1 package com.study;
 2 
 3 import org.apache.commons.collections4.CollectionUtils;
 4 
 5 import java.util.ArrayList;
 6 import java.util.Arrays;
 7 import java.util.Collection;
 8 import java.util.List;
 9 
10 public class TestSubtract {
11     private void test01() {
12         List<Integer> a = Arrays.asList(1, 1, 2, 2, 3, 3, 4);
13         List<Integer> b = Arrays.asList(1, 2, 3);
14 
15         Collection<Integer> subtract = CollectionUtils.subtract(a, b);
16         System.out.println(subtract);
17 
18         List<Integer> c = new ArrayList<>();
19         c.add(1);
20         c.add(1);
21         c.add(2);
22         c.add(2);
23         c.add(3);
24         c.add(3);
25         c.add(4);
26 
27         List<Integer> d = new ArrayList<>();
28         d.add(1);
29         d.add(2);
30         d.add(3);
31 
32         Collection<Integer> subtract1 = CollectionUtils.subtract(a, b);
33 
34         System.out.println(subtract1);
35     }
36 
37     private void test02() {
38         List<Integer> c = new ArrayList<>();
39         c.add(1);
40         c.add(1);
41         c.add(2);
42         c.add(2);
43         c.add(3);
44         c.add(3);
45         c.add(4);
46 
47         List<Integer> d = new ArrayList<>();
48         d.add(1);
49         d.add(2);
50         d.add(3);
51 
52         c.removeAll(d);
53         System.out.println(c);
54 
55     }
56 
57     public static void main(String[] args) {
58         new TestSubtract().test01();
59         new TestSubtract().test02();
60     }
61 }

结果如下:

1 >>>
2 # CollectionUtils.subtract()方法求差集的结果为:
3 [1, 2, 3, 4]
4 [1, 2, 3, 4]
5 # List.removeAll()方法求差集的结果为:
6 [4]

 

注意

比较二者结果的不同

  • 前者只是单纯的除去第二个集合中的元素,不会重复去除
  • 后者会将第一个集合中包含的第二个集合中的元素全部去除

比较二者结果的不同:

  • 前者可以使用Arrays.asList()方法生成List
  • 后者不可以
posted @ 2022-01-08 21:43  r1-12king  阅读(5532)  评论(0编辑  收藏  举报