如果给你两个集合,需要挑选出重复的元素,怎么解决?
两个for循环?依次遍历?那样太慢了。
package com.cw.wizbank;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @Description:
* @Author :小书包
* @CreateDate :2018-11-21 10:10
*/
public class DuplicatedList {
public static void main(String[] args) {
List list1 = new ArrayList<>(Arrays.asList(new Person("jack",12)
,new Person("smith",14)
,new Person("tom",12)
,new Person("alex",13)
,new Person("red",12)
,new Person("green",16)
));
List list2 = new ArrayList<>(Arrays.asList(new Person("jack",12)
,new Person("smith",14)
,new Person("tom1",12)
,new Person("alex1",13)
,new Person("red",12)
,new Person("green",16)
));
boolean boo = list1.removeAll(list2);
System.out.println(boo);
System.out.println(list1);
System.out.println(list2);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = 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 +
'}';
}
}
一句代码就解决查重问题。
boolean boo = list1.removeAll(list2);
当然在这个里面,因为是对对象进行判断的,因此需要对象实现equals方法和hashcode方法
true
[Person{name='tom', age=12}, Person{name='alex', age=13}]
[Person{name='jack', age=12}, Person{name='smith', age=14}, Person{name='tom1', age=12}, Person{name='alex1', age=13}, Person{name='red', age=12}, Person{name='green', age=16}]
查询之后的结果如上