TreeSet的去重与HashCode和equals无关,通过实现Comparable接口并重写CompareTo方法实现自定义去重。CompareTo方法的返回值为0的情况下被视为相同元素进行去重
import java.util.TreeSet;
/**
* @author lzy
*/
public class Main {
public static void main(String[] args) {
TreeSet<Person> treeSet = new TreeSet<>();
treeSet.add(new Person(1, "a"));
treeSet.add(new Person(1, "b"));
treeSet.add(new Person(1, "c"));
treeSet.add(new Person(2, "a"));
treeSet.add(new Person(3, "c"));
treeSet.add(new Person(2, "b"));
for (Person person : treeSet) {
System.out.println(person);
}
}
}
class Person implements Comparable<Person> {
int age;
String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
//返回值为0时被视为相同元素,这里去重规则为年龄相同不去重
@Override
public int compareTo(Person o) {
if (o.age - this.age == 0) {
return 1;
}
return o.age - this.age;
}
}