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