ListUtils有两个版本,分别是
org.apache.commons.collections.ListUtils 和
org.apache.commons.collections4.ListUtils。
其中后者为最新版本,对前一版本部分方法有优化,建议使用后一版本。
差集
List<Integer> list1 = Arrays.asList(1, 1, 3, 4);
List<Integer> list2 = Arrays.asList(1, 2, 2, 5);
System.out.println(ListUtils.subtract(list1,list2)); // [1, 3, 4]
System.out.println(ListUtils.subtract(list2,list1)); // [2, 2, 5]
ListUtils 的subtract方法,参数为两个list集合,返回一个新的list集合,集合中的元素为:依次遍历list1,在list2中不存在,则加入返回集合中,如果存在则去除list2中的对应元素,所以存在一种情况,某个元素list1中存在两个,list2中存在一个,则返回集合中有一个此元素。
在 org.apache.commons.collections4.ListUtils 和 org.apache.commons.collections.ListUtils 中实现方式是不一样的。
org.apache.commons.collections4.ListUtils 中:新建一个list集合作为返回值,将list2封装到 HashBag 对象中,底层是hashmap,key是list元素,value是1,然后获得list1的迭代器,遍历list1中的元素,判断如果不存在hashBag中,则添加进返回集合中,如果存在则删除hashBag中元素。
org.apache.commons.collections.ListUtils 中:先将list封装到一个新的list中,获得list2的迭代器,新的list遍历list2的元素,最后返回新的list。
两种方式的结果是一样的。
并集
对两个集合中元素合并,不去重,返回一个新集合。
System.out.println(ListUtils.union(list1,list2)); // [1, 1, 3, 4, 1, 2, 2, 5]
System.out.println(ListUtils.union(list2,list1)); // [1, 2, 2, 5, 1, 1, 3, 4]
交集
返回两个list集合中的相同元素,传入的两个集合不分前后顺序。
System.out.println(ListUtils.intersection(list1,list2)); // [1]
System.out.println(ListUtils.intersection(list2,list1)); // [1]
去除
前一个集合中去除在后一个集合中存在的元素,返回剩下的元素。
System.out.println(ListUtils.removeAll(list1,list2)); // [3, 4]
System.out.println(ListUtils.removeAll(list2,list1)); // [2, 2, 5]
拆分
System.out.println(ListUtils.partition(list1,3)); // [[1, 1, 3], [4]]