TreeSet存储自定义对象
- TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一
- 当compareTo方法返回0的时候集合中只有一个元素
- 当compareTo方法返回正数的时候集合会怎么存就怎么取
- 当compareTo方法返回负数的时候集合会倒序存储
package com.heima.bean;
public class Person implements Comparable<Person> {
private String name;
private int age;
...
...
@Override
public int compareTo(Person o) {
return 1;
}
}
package com.heima.set;
import java.util.TreeSet;
import com.heima.bean.Person;
public class Demo05_TreeSet {
public static void main(String[] args) {
TreeSet<Person> ts = new TreeSet<>();
ts.add(new Person("张三", 23));
ts.add(new Person("李四", 13));
ts.add(new Person("周七", 13));
ts.add(new Person("王五", 43));
ts.add(new Person("赵六", 33));
System.out.println(ts);
}
}
Exception in thread “main” java.lang.ClassCastException: com.heima.bean.Person cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1188)
at java.util.TreeMap.put(TreeMap.java:531)
at java.util.TreeSet.add(TreeSet.java:255)
at com.heima.set.Demo05_TreeSet.main(Demo05_TreeSet.java:18)
如果自定义类不重写Comparable接口,就会报如上的错误。
查看Comparable的API,发现有很多类都实现了Comparable接口,也就是说有很多类都可以进行比较.
该接口中有一个compareTo方法,该方法可以让我们去完成比较.
怎么让自定义类可以进行比较呢,就去让该类去实现Comparable接口,并重写compareTo方法即可.