Java 两个ArrayList的交集、并集、差集

废话不多说,直接上

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));
		}

	}
}

-------------------------------------------------------------------------------------------------------------

记录点滴!

猜你喜欢

转载自blog.csdn.net/a1085578081/article/details/100080245