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
  • 后者不可以


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM