1、当TreeSet对象为空时,添加第一个数据时第一条数据会自己与自己进行比价而非直接添加至TreeSet中
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
TreeSet<Person> set = new TreeSet<Person>();
set.add(new Person("张三"));
}
}
//创建一个类,让其继承Comparable类
class Person implements Comparable<Person>{
String name;
public Person() {
super();
}
public Person(String name) {
super();
this.name = name;
}
@Override
public int compareTo(Person o) {
System.out.println("第一个数据进行了比较!");
return 0;
}
}
运行结果:
程序添加第一条数据时如果是直接添加至TreeSet中则不会进行比较,即不会使用compareTo方法,而运行结果表明了在TreeSet为空时添加数据,数据会自行与自身进行比较。
2、TreeSet进行插入数据时,如果两条数据相同则将新传入的数据丢弃
3、类继承Comparable,重写compareTo方法,当新增数据时,是拿新增数据与原有数据进行比较,即compareTo的形参为已经插入的数据。
创建一个类并声明这个类的比较性
class Person implements Comparable<T>{
String name;
public Person() {
super();
}
public Person(String name) {
super();
this.name = name;
}
@Override
public String toString() {
return "Person [name=" + name + "]";
}
@Override
public int compareTo(Person o) {
return 0;
}
}
4、在常见TreeSet时如果类没有比较性,则需要指定比较器。
TreeSet<Person> set = new TreeSet<Person>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
return 0;
}
});
o1为现在正在插入的元素,o2为之前插入的元素
TreeSet的比较的形式与二叉排序树插入元素时插入元素的比较类似