今天无意间去菜鸟教程( www.runoob.com )翻了一下JAVA基础,发现了一个意外的惊喜,就是关于对两个List 集合进行取交集和差集的方法,感觉十分受用,因为自己在之前做项目的时候,确实有碰到过类似的需求,所以在此刻记录下来,与各位技术同行分享一下。
1.取交集
/**
* @Description: 取交集
*/
public static void listJiaoJI(){
List<String> list1 = new ArrayList<String>();
list1.add("names");
list1.add("age");
list1.add("sex");
list1.add("weight");
List<String> list2 = new ArrayList<String>();
list2.addAll(list1);
list2.remove(1);
list2.remove("age");
list2.add("job");
list2.add("family");
System.out.println("list1: \n"+String.join(",", list1));
System.out.println("list2: \n"+String.join(",", list2));
// retainAll 表示取集合中有相同的值
boolean contain = list2.retainAll(list1);
System.out.println("是否含有交集:"+contain+"\n交集: "+String.join(",", list2));
}
取交集运行结果:
list1:
names,age,sex,weight
list2:
names,sex,weight,job,family
是否含有交集:true
交集: names,sex,weight
1.取差集
/**
* @Description: 取差集
*/
public static void listChaJi(){
List<Integer> list1 = new LinkedList<Integer>();
list1.add(88);
list1.add(99);
list1.add(1566);
list1.add(352);
List<Integer> list2 = new LinkedList<Integer>();
list2.addAll(list1);
list2.remove(1);
list2.add(666);
list2.add(111);
System.out.println("list1: ");
for(int i = 0; i < list1.size(); i++ ){
if(0 == i){
System.out.print(list1.get(i));
continue;
}
System.out.print(","+list1.get(i));
}
System.out.println("\nlist2: ");
for(int i = 0; i < list2.size(); i++ ){
if(0 == i){
System.out.print(list2.get(i));
continue;
}
System.out.print(","+list2.get(i));
}
list2.removeAll(list1);
System.out.println("\n差集: ");
for(int i = 0; i < list2.size(); i++ ){
if(0 == i){
System.out.print(list2.get(i));
continue;
}
System.out.print(","+list2.get(i));
}
}
取差集运行结果:
list1:
88,99,1566,352
list2:
88,1566,352,666,111
差集:
666,111
我在取交集的时候用的是ArrayList,在取差集的时候用的是LinkedList,这两个集合的共同之处是都实现了java.util.List 接口,所以,哪怕把ArrayList 或 LinkedList 替换成其他实现了java.util.List 接口的集合,上面的代码也是受用的,具体实现了java.util.List 接口的集合有如下几种(取自jdk 1.8 API 文档):
学无止境,生生不息,下次见。