一、List取差集的概念
在Java编程中,List是常用的一种数据结构,也是双列集合(存储有序的,可重复的元素),因此对List进行操作时我们经常会用到取交集、取并集、取差集等操作。而本文将重点讲解如何取两个List的差集。所谓List的差集,即取出两个List中的不同元素。
二、List取差集的实现方法
在Java中实现两个List取差集的方法比较多,下面我们将分别介绍几种实现方式。
1、使用retainAll方法
List list1 = new ArrayList(); list1.add("A"); list1.add("B"); list1.add("C"); List list2 = new ArrayList(); list2.add("B"); list2.add("C"); list2.add("D"); list1.retainAll(list2); System.out.println("list1与list2取差集的结果为:"+list1);
上述代码中,我们首先创建了两个List,List1包含了元素A、B、C,List2包含了元素B、C、D,然后用retainAll()方法取得了list1与list2取差集的结果。执行结果为:[B, C]。retainAll方法的作用是取两个List的交集,而这里之所以能够得到差集,是因为先找到了交集,再将交集从List1中删去,剩下的元素就是差集。
2、使用CollectionUtils的subtract方法
Apache Commons Collections是Java常用的一个工具类库,其中提供了各种操作集合的方法。其中有一个CollectionUtils类,其subtract方法可以用来取两个List的差集。
List list1 = new ArrayList(); list1.add("A"); list1.add("B"); list1.add("C"); List list2 = new ArrayList(); list2.add("B"); list2.add("C"); list2.add("D"); Collection result = CollectionUtils.subtract(list1,list2); System.out.println("list1与list2取差集的结果为:"+result);
上述代码中,通过CollectionUtils的subtract方法得到了List1与List2的差集。其中,subtract方法会调用ListUtils中的subtract方法,该方法的实现方式与retainAll方法类似,只不过在subtract方法中,判断元素是否为交集的逻辑是通过contains方法进行的。
3、使用自定义方法
除了使用Java内置的方法和Apache Commons Collections库的方法之外,我们也可以自定义方法来实现两个List的差集。具体实现方式为判断List2中的元素是否包含在List1中,若不包含则加入到一个新的List中,最终得到两个List的差集。
public static List getDifference(List list1,List list2){ List difference = new ArrayList(); for (Object obj : list1) { if (!list2.contains(obj)) { difference.add(obj); } } return difference; } List list1 = new ArrayList(); list1.add("A"); list1.add("B"); list1.add("C"); List list2 = new ArrayList(); list2.add("B"); list2.add("C"); list2.add("D"); List result = getDifference(list1, list2); System.out.println("list1与list2取差集的结果为:"+result);
三、List取差集的注意事项
在使用List取差集的过程中,我们需要注意以下几点:
1、当List中包含的元素是自定义的对象时,需要重写该对象的equals方法才能够得到正确的差集。
2、当List中包含的元素是基本类型时(如int、float、double等),采用自定义方法的方式取差集效率会更高。
3、List取差集的过程中可能会遇到空指针异常,需要对List进行非空判断。
以上就是Java两个List取差集的详细介绍,希望对大家有所帮助。