注意:自定义类型如果想要创建对象放入TreeSet集合,必须实现Comparable接口,也就是第一种排序方式(元素自身具备比较性),否则TreeSer根本不知道如何排序存储。
存储第一个可能不会报错(还没有调用对象的compareTo方法),但存储第二个就会引发ClassCastException异常。
例子:
/*
将自定义类Person的对象存入TreeSet集合
并用两种方法实现排序:
第一种方法(必须的,否则ClassCastException异常):
以年龄进行排序,如果年龄相等,则以名字字符串的compareTo方法排序(按字典顺序比较两个字符串),如果名字也相同,视为同一个人。
第二种方法(看需求):
以名字字符串的compareTo方法排序(按字典顺序比较两个字符串),如果字符串相同,再以年龄进行排序,如果相同视为同一个人。
*/
import java.util.*;
class Person implements Comparable //第一种方法
{
private String name;
private int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public int compareTo(Object obj) //第一种方法
{
Person p=(Person)obj;
if(this.age>p.age)
return 1;
else if(this.age
ts=new TreeSet
(new MyCompare());//第二种方法需要传参数new MyCompare(); ts.add(new Person("lisi01",10)); ts.add(new Person("lisi03",12)); ts.add(new Person("lisi02",11)); ts.add(new Person("lisi04",11)); Iterator
it=ts.iterator(); while(it.hasNext()) { Person p=(Person)it.next(); sop(p.getName()+"....."+p.getAge()); } } } class MyCompare implements Comparator
//第二种方法 PS:这里用了泛型,所以下面compare方法的参数可以不是Object,而且免去强转的麻烦 { public int compare(Person p1,Person p2) { int num=p1.getName().compareTo(p2.getName()); if(num==0) { if(p1.getAge()>p2.getAge()) return 1; else if(p1.getAge()