Dev-Wiki
5/10/2017 - 1:48 PM

Java集合

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