黑马程序员_日记45_TreeSet第二种排序方式Comparator

 ——- android培训java培训、期待与您交流! ———-

当元素不具备可比性或者元素所具备的可比性不是所需要的时,
那该怎么办呢???
修改代码是一件很痛苦的事情!
我们应当避免这种痛苦!
这就引出了TreeSet的第二种排序方式:
让集合具备可比性。

那么该怎么做才能让集合具备可比性呢???
答案是构造比较器Comparator,
并将comparator对象作为参数传递给TreeSet构造函数,
由于Comparator是接口,要创建类实现该接口,
并且重写compare(o1,o2)方法!
下面对此进行演示:

import java.util.*;

//学生类自身不具备可比性
class Student 
{
    private String name;//学生姓名
    private int age;//学生年龄

    //构造函数传递参数
    Student(String name,int age)
    {
        this.name = name;
        this.age = age;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    public int getAge()
    {
        return age;
    }
}

//创建类实现Comparator接口
class MyComparator implements Comparator
{
    public int compare(Object o1,Object o2)
    {
        //强制转换为Student类型
        Student s1 = (Student)o1;
        Student s2 = (Student)o2;

        //判断两学生年龄关系
        int num = new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));

        //如果年龄相等,判断姓名
        if( num == 0)
            return s1.getName().compareTo(s2.getName());

        //否则不判断姓名,返回年龄关系
        return num;
    }
}
//主类
class TreeSetComparatorDemo
{
    public static void main(String[] args)
    {
        //1 创建TreeSet集合
        TreeSet ts = new TreeSet(new MyComparator());

        //2 添加学生对象
        ts.add(new Student("Jack",20));
        ts.add(new Student("Jane",21));
        ts.add(new Student("Jane",21));
        ts.add(new Student("Jimmy",20));
        ts.add(new Student("Jone",15));
        ts.add(new Student("Jone",15));
        ts.add(new Student("Tom",26));
        ts.add(new Student("Jordan",16));

        //迭代取出
        for(Iterator it = ts.iterator(); it.hasNext(); )
        {
            //强制转换为Student对象
            Student stu = (Student)it.next();
            System.out.println(stu.getName()+"----"+stu.getAge());
        }       
    }
}

运行结果:
Jone—-15
Jordan—-16
Jack—-20
Jimmy—-20
Jane—-21
Tom—-26
这里写图片描述
这与第一种排序方式运行结果一致,
说明已经成功的对学生对象进行了去重存入,
并自动排序成功!

小结:如果两种排序方式都存在,要以比较器为主,
因为这样修改起来方便!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值