美文网首页
java的list的并交查集操作

java的list的并交查集操作

作者: 尘埃里的玄 | 来源:发表于2021-03-03 19:08 被阅读0次

    废话不多说,直接上

    1、定义一个Person类:
    public class Person {
    String name;
    int age;

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    

    }
    2、测试类
    一、定义两个list,分别为list1、list2,为他们添加上几个Person对象:
    ArrayList list1 = new ArrayList<Person>();
    ArrayList list2 = new ArrayList<Person>();
    Person p1 = new Person("xz", 20);
    Person p2 = new Person("erge", 18);
    Person p3 = new Person("ermeng", 19);
    Person p4 = new Person("yy", 25);

    list1.add(p1);
    list1.add(p2);
    list1.add(p3);

    list2.add(p2);
    list2.add(p3);
    list2.add(p4);
    直观显示如下:

    二、交集:
    list3.retainAll(list4);
    // 交集(A∩B)
    ArrayList list3 = (ArrayList) list1.clone();
    ArrayList list4 = (ArrayList) list2.clone();
    list3.retainAll(list4);
    System.out.println("交集如下");
    for (int i = 0; i < list3.size(); i++) {
    System.out.println(list3.get(i));
    }
    输出如下:

    注:这边如果用ArrayList list3 = list1;直接复制不行,这时候list3和list1是指向同一个内存地址,操作了list3相当于也操作了list1,会影响到后面并集和差集的结果。用clone能解决这个问题!后面的也都是用克隆。

    三、无重复并集:
    list6.removeAll(list5);
    list5.addAll(list6);
    // 无重复并
    ArrayList list5 = (ArrayList) list1.clone();
    ArrayList list6 = (ArrayList) list2.clone();
    list6.removeAll(list5);
    list5.addAll(list6);
    System.out.println("无重复并集如下");
    for (int i = 0; i < list5.size(); i++) {
    System.out.println(list5.get(i));
    }
    输出如下:

    .

    四、可重复并集:
    list7.addAll(list8);
    // 可重复并集
    ArrayList list7 = (ArrayList) list1.clone();
    ArrayList list8 = (ArrayList) list2.clone();
    list7.addAll(list8);
    System.out.println("可重复并集如下");
    for (int i = 0; i < list7.size(); i++) {
    System.out.println(list7.get(i));
    }
    输出如下:

    五、差集(A-B)
    list9.removeAll(list10);
    // 差集第一种(A-B)
    ArrayList list9 = (ArrayList) list1.clone();
    ArrayList list10 = (ArrayList) list2.clone();
    list9.removeAll(list10);
    System.out.println("差集第一种(A-B)如下");
    for (int i = 0; i < list9.size(); i++) {
    System.out.println(list9.get(i));
    }
    输出如下:

    六、差集(B-A)
    list12.removeAll(list11);
    // 差集第二种(B-A)
    ArrayList list11 = (ArrayList) list1.clone();
    ArrayList list12 = (ArrayList) list2.clone();
    list12.removeAll(list11);
    System.out.println("差集第一种(A-B)如下");
    for (int i = 0; i < list12.size(); i++) {
    System.out.println(list12.get(i));
    }
    输出如下:


    所有代码如下:

    Person.java
    public class Person {
    String name;
    int age;

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    

    }
    MainTest.java
    import java.util.ArrayList;

    public class MainTest {
    public static void main(String[] args) {
    ArrayList list1 = new ArrayList<Person>();
    ArrayList list2 = new ArrayList<Person>();
    Person p1 = new Person("xz", 20);
    Person p2 = new Person("erge", 18);
    Person p3 = new Person("ermeng", 19);
    Person p4 = new Person("yy", 25);

        list1.add(p1);
        list1.add(p2);
        list1.add(p3);
    
        list2.add(p2);
        list2.add(p3);
        list2.add(p4);
    
        // 交集(A∩B)
        ArrayList list3 = (ArrayList) list1.clone();
        ArrayList list4 = (ArrayList) list2.clone();
        list3.retainAll(list4);
        System.out.println("交集如下");
        for (int i = 0; i < list3.size(); i++) {
            System.out.println(list3.get(i));
        }
    
        // 无重复并
        ArrayList list5 = (ArrayList) list1.clone();
        ArrayList list6 = (ArrayList) list2.clone();
        list6.removeAll(list5);
        list5.addAll(list6);
        System.out.println("无重复并集如下");
        for (int i = 0; i < list5.size(); i++) {
            System.out.println(list5.get(i));
        }
    
        // 可重复并集
        ArrayList list7 = (ArrayList) list1.clone();
        ArrayList list8 = (ArrayList) list2.clone();
        list7.addAll(list8);
        System.out.println("可重复并集如下");
        for (int i = 0; i < list7.size(); i++) {
            System.out.println(list7.get(i));
        }
    
        // 差集第一种(A-B)
        ArrayList list9 = (ArrayList) list1.clone();
        ArrayList list10 = (ArrayList) list2.clone();
        list9.removeAll(list10);
        System.out.println("差集第一种(A-B)如下");
        for (int i = 0; i < list9.size(); i++) {
            System.out.println(list9.get(i));
        }
    
        // 差集第二种(B-A)
        ArrayList list11 = (ArrayList) list1.clone();
        ArrayList list12 = (ArrayList) list2.clone();
        list12.removeAll(list11);
        System.out.println("差集第一种(A-B)如下");
        for (int i = 0; i < list12.size(); i++) {
            System.out.println(list12.get(i));
        }
    
    }
    

    }

    image.png
    作者本人一开始写成了: image.png

    发现并没有做差集,最后发现list的类型不同

    改为: image.png
    就ok

    相关文章

      网友评论

          本文标题:java的list的并交查集操作

          本文链接:https://www.haomeiwen.com/subject/hrlcqltx.html