java 取交集方法retainAll的实现

java 取交集方法retainAll

有两个集合newCoures和oldCourses,判断这两个集合是否包含相同的对象或元素,

可以使用retainAll方法:

oldCourses.retainAll(newCoures)

如果存在相同元素,oldCourses中仅保留相同的元素。

如果不存在相同元素,oldCourse会变为空。

如果有多个集合oldCourses1、oldCourses2、oldCourses3等,分别与newCourses比较,应该将newCourses统一放在后面,像这样:

oldCourses1.retainAll(newCoures);oldCourses2.retainAll(newCoures);oldCourses3.retainAll(newCoures);
public class Test {    public static void main(String[] args) {        List<String> list1 = new ArrayList<String>();        List<String> list2 = new ArrayList<String>();        List<String> list3 = new ArrayList<String>();        for (int i = 0; i < 20; i++) {            list1.add(i+"");            if(i%2 == 0) {                list2.add(i+"");            }            list3.add(i+"@");        }        // list1 与 list2 存在相同元素,list1集合只保留list2中存在的元素        list1.retainAll(list2);        if(list1.isEmpty()) {            System.out.println("不包含");        } else {            System.out.println("包含");        }        System.out.println(list1);        // list1 与 list3 不存在相同元素,list1集合变为空        list1.retainAll(list3);        if(list1.isEmpty()) {            System.out.println("不包含");        } else {            System.out.println("包含");        }        System.out.println(list1);    }}

运行结果如下:

retainall的问题

在调用java中的retainall时遇到个问题

代码如下:

public static ArrayList<Integer> res_and(ArrayList<Integer> s1,ArrayList<Integer> s2) {  s1.retainAll(s2);//  System.out.println("s1=");//  System.out.println(s1);  return s1;

我定义了一个函数,用来求出s1和s2共有的部分,将其保存在s1中。

但是貌似这么写会导致s1中重复元素会重复出现两次。

解决办法:

在返回前加上一句

s1  = new ArrayList<Integer>(new HashSet<Integer>(s1));

即可。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

我等你用尽了所有的哀伤;而你眼中却有我所不懂的凄凉。

java 取交集方法retainAll的实现

相关文章:

    你感兴趣的文章:

    标签云: