您的位置:首页 > 编程语言 > Java开发

TreeSet集合存放自定义类型的对象,可以使用比较器,实现Comparable接口自己设置排序方式

2016-10-26 17:34 921 查看
TreeSet集合
* 其中的元素按照自然顺序进行排序的
* 注意:在此类集合中,只能存放同一类型的元素
* 如果集合中的元素为自定义类型的对象,有以下两种方式可以自己设置排序方式:
* 1.自定义的类必须实现java.lang.Comparable接口,并且实现其中的抽象方法

* 2.根据自定义类写一个比较器的类,该比较器必须实现java.util.Comparator接口,并且实现接口的抽象方法,在创建TreeSet对象时,将比较器对象传入。

         第一种

         实现Comparable接口,实现compareTo(Object o) 方法

 @Override

public int compareTo(Object o) {
if(o instanceof Person){
Person p=(Person) o;
if(this.age<p.age){
return -1;
}else if(this.age>p.age){
return 1;
}else{
return 0;
}
}
return 0;

}

       实现的抽象方法compareTo在TreeSet集合放入类对象时被调用,并且是放入的类对象跟集合前面的类对象比较。即this指当前类对象,Object o指前面的那些对象。所以此处是正序排列,当前对象的属性值大时返回为正数。

        第二种

        写一个比较器的类实现java.util.Comparator接口,实现compare(Object o1, Object o2) 方法

@Override

public int compare(Object o1, Object o2) {
if(o1 instanceof Student && o2 instanceof Student){
Student s1=(Student)o1;
Student s2=(Student)o2;
int id = s1.getStuId()-s2.getStuId();
//当前对象减参数对象返回值,是从小到大
return id;
}
return 0;

}

*o1相等于java.lang.comparable接口中的conparaTo()方法的当前对象

*o2相等于 java.lang.comparable接口中的conparaTo()方法的参数对象

此比较器排序为正序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java比较器
相关文章推荐