美文网首页
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的并交查集操作

    废话不多说,直接上 1、定义一个Person类:public class Person {String name;...

  • markdown学习

    #并查集 ##并查集的定义 ##并查集的操作

  • 数据结构与算法(十二)并查集(Union Find)

    本文主要包括以下内容: 并查集的概念 并查集的操作 并查集的实现和优化Quick FindQuick Union基...

  • 并查集

    并查集 并查集是什么 并查集是一种用来管理元素分组情况的数据结构,并查集可以高效地进行如下操作: 查询元素a和元素...

  • 并查集

    并查集是什么 并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。不过需要注意并查集虽然可以...

  • 第十二周

    Algorithm 并查集: java实现并查集,一种特殊的树,子节点指向父节点。rank优化、路径优化。 git...

  • 算法笔记之并查集——找出知晓秘密的所有专家

    并查集知识 首先介绍一下并查集。并查集主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作: ...

  • python学习笔记(python操作redis和memcach

    python 操作redis 1,链接redis 2,字符串操作 3,list操作 4,set操作 ··· 并集 ...

  • 408新增:并查集

    一、 并查集的概念 并查集(Disjoint Set)的逻辑结构属于集合,只进行并和查两种基本操作。一个集合可以划...

  • 算法(02)并查集

    并查集也叫作不相交集合(Disjoint Set) 并查集有2个核心操作 (Find):查找元素所在的集合(这里的...

网友评论

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

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