Java集合的交集, 并集, 差集
package net.devwiki.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Created by zyz on 2017/5/9.
*/
public class ListDemo {
public static void main(String[] args) {
diffOld();
diffNew();
intersection();
sum();
copy();
}
private static void copy() {
System.out.println("==========copy复制old======");
List<Person> oldList = getOldList();
Person[] persons = new Person[oldList.size()];
List<Person> copyList = Arrays.asList(persons);
Collections.copy(copyList, oldList);
System.out.println("----------copyList----------");
copyList.forEach(System.out::println);
}
private static void sum() {
System.out.println("==========new并集old======");
List<Person> oldList = getOldList();
List<Person> newList = getNewList();
Set<Person> set = new HashSet<>();
set.addAll(oldList);
set.addAll(newList);
set.forEach(System.out::println);
}
private static void diffOld() {
System.out.println("==========old差集new======");
List<Person> oldList = getOldList();
List<Person> newList = getNewList();
oldList.removeAll(newList);
System.out.println("----------oldList----------");
oldList.forEach(System.out::println);
System.out.println("----------newList----------");
newList.forEach(System.out::println);
}
private static void diffNew() {
System.out.println("==========new差集old======");
List<Person> oldList = getOldList();
List<Person> newList = getNewList();
newList.removeAll(oldList);
System.out.println("----------oldList----------");
oldList.forEach(System.out::println);
System.out.println("----------newList----------");
newList.forEach(System.out::println);
}
private static void intersection() {
System.out.println("==========old交集new======");
List<Person> oldList = getOldList();
List<Person> newList = getNewList();
oldList.retainAll(newList);
System.out.println("----------oldList----------");
oldList.forEach(System.out::println);
System.out.println("----------newList----------");
newList.forEach(System.out::println);
}
private static List<Person> getOldList() {
List<Person> list = new ArrayList<>();
Person p1 = new Person();
p1.name = "p1";
p1.age = 11;
list.add(p1);
Person p2 = new Person();
p2.name = "p2";
p2.age = 12;
list.add(p2);
Person p3 = new Person();
p3.name = "p3";
p3.age = 13;
list.add(p3);
return list;
}
private static List<Person> getNewList() {
List<Person> list = new ArrayList<>();
Person p1 = new Person();
p1.name = "p1";
p1.age = 11;
list.add(p1);
Person p4 = new Person();
p4.name = "p4";
p4.age = 14;
list.add(p4);
Person p5 = new Person();
p5.name = "p5";
p5.age = 15;
list.add(p5);
return list;
}
private static class Person {
String name;
int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (age != person.age) return false;
return name != null ? name.equals(person.name) : person.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}' +
super.toString();
}
}
}