一.非对象集合
1.List自带方法
方法 | 功能 |
---|---|
retainAll() | 交集 |
removeAll() | 差集 |
addAll() | 并集 |
求并集时记得去重
public class Main {
public static void main(String[] args) {
// [1,2,3]
List<Integer> list01 = new ArrayList<>();
Integer[] arr = new Integer[]{1,2,3};
list01.addAll(Arrays.asList(arr));
// [4,5,6]
List<Integer> list02 = new ArrayList<>();
arr = new Integer[]{4,5,6};
list02.addAll(Arrays.asList(arr));
// [1,3,6]
List<Integer> list03 = new ArrayList<>();
arr = new Integer[]{1,3,6};
list03.addAll(Arrays.asList(arr));
// 交集
List<Integer> listA = new ArrayList<>(list01);
listA.retainAll(list03);
System.out.println(listA);
// [1,3]
// 并集
List<Integer> listB = new ArrayList<>(list01);
listB.removeAll(list02); // 去重
listB.addAll(list02);
System.out.println(listB);
// [1, 2, 3, 4, 5, 6]
// 差集
List<Integer> listC = new ArrayList<>(list01);
listC.removeAll(list03);
System.out.println(listC);
// [2]
}
}
2.使用CollectionUtils
需要自己下载org.apache.commons.collections4 包。
方法 | 功能 |
---|---|
intersection() | 交集 |
union() | 并集 |
subtract() | 差集 |
import org.apache.commons.collections4.CollectionUtils;
public class Main {
public static void main(String[] args) {
// [1,2,3]
List<Integer> list01 = new ArrayList<>();
Integer[] arr = new Integer[]{1,2,3};
list01.addAll(Arrays.asList(arr));
// [4,5,6]
List<Integer> list02 = new ArrayList<>();
arr = new Integer[]{4,5,6};
list02.addAll(Arrays.asList(arr));
// [1,3,6]
List<Integer> list03 = new ArrayList<>();
arr = new Integer[]{1,3,6};
list03.addAll(Arrays.asList(arr));
// 交集
System.out.println(CollectionUtils.intersection(list01,list03));
// [1, 3]
// 并集
System.out.println(CollectionUtils.union(list01,list02));
// [1, 2, 3, 4, 5, 6]
// 差集
System.out.println(CollectionUtils.subtract(list01,list03));
// [2]
}
二.对象集合
对象集合操作时要重写equals()和hashCode()方法。
因为比较的是对象属性的值,而不是对象内存地址
public class Student {
Integer sid;
String sname;
public Student() {
}
public Student(Integer sid, String sname) {
this.sid = sid;
this.sname = sname;
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Student student = (Student) o;
return Objects.equals(sid, student.sid) && Objects.equals(sname, student.sname);
}
@Override
public int hashCode() {
return Objects.hash(sid, sname);
}
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
'}';
}
}
public class Main {
public static void main(String[] args) {
Student s1 = new Student(1,"张三");
Student s2 = new Student(2,"李四");
// s3 和 s3s 应看作同一个人
Student s3 = new Student(3,"王五");
Student s3s = new Student(3,"王五");
List<Student> list01 = new ArrayList<>();
list01.add(s1);
list01.add(s3);
List<Student> list02 = new ArrayList<>();
list02.add(s2);
list02.add(s3s);
System.out.println(CollectionUtils.intersection(list01,list02));
// [Student{sid=3, sname='王五'}]
System.out.println(CollectionUtils.union(list01,list02));
// [Student{sid=2, sname='李四'}, Student{sid=1, sname='张三'}, Student{sid=3, sname='王五'}]
System.out.println(CollectionUtils.subtract(list01,list02));
// [Student{sid=1, sname='张三'}]