黑马程序员—基础-TreeSet的使用

/*

TreeSet:它可以给Set集合中的元素进行指定方式的排序。
        保证元素唯一性的方式:通过比较的结果是否为0.
        底层数据结构是:二叉树。
*/


import java.util.*;


class TreeSetDemo2  
{
    public static void main(String[] args)  
    {
        TreeSet ts = new TreeSet();

        ts.add(new Student("lisi0",30));
        ts.add(new Student("lisixx",29));
        ts.add(new Student("lisi9",29));
        ts.add(new Student("lisi8",38));
        ts.add(new Student("lisixx",29));
        ts.add(new Student("lisi4",14));
        //ts.add(new Student(39));
        ts.add(new Student("lisi7",27));



        System.out.println(ts);
    }
}

//同姓名同年龄的学生视为同一个学生。按照学生的年龄排序。
class Student implements Comparable
{
    private int age;
    private String name;
    Student(String name,int age)
    {
        this.age = age;
        this.name = name;
    }

    public int compareTo(Object obj)
    {
        
        Student stu = (Student)obj;
        
        int num = new Integer(this.age).compareTo(new Integer(stu.age));

        return num==0?this.name.compareTo(stu.name):num;

        /*
        if(this.age>stu.age)
            return 1;
        if(this.age==stu.age)
            return this.name.compareTo(stu.name);
        return -1;
        */
        /**/
    }

    public int getAge()
    {
        return age;
    }
    public String toString()
    {
        return name+"::"+age;
    }
}



=============================================




/*

TreeSet:它可以给Set集合中的元素进行指定方式的排序。
        保证元素唯一性的方式:通过比较的结果是否为0.
        底层数据结构是:二叉树。

        排序的第一种方式:
            让元素自身具备比较性。只要让元素实现Comparable接口,覆盖compareTo方法即可。
            
            但是,如果元素自身不具备比较性,或者元素自身具备的比较性,不是所需要的。
            比如,学生的自然排序是按年龄排序,现在想要按照学生姓名排序。还可以不改动原有代码。
            这时怎么办呢?
        排序的第二种方式:自定比较器的方式。
            这时可以让集合自身具备比较性。
            可以定义一个类实现Comparator接口,覆盖compare方法。将该Comparator接口子类对象作为实际参数
            传递给TreeSet集合构造函数。

            该对象就是比较器。



*/


import java.util.*;


class TreeSetDemo3  
{
    public static void main(String[] args)  
    {
        TreeSet ts = new TreeSet(new StudentComparatorByName());

        ts.add(new Student("lisi0",30));
        ts.add(new Student("lisixx",29));
        ts.add(new Student("lisi9",29));
        ts.add(new Student("lisi8",38));
        ts.add(new Student("lisixx",29));
        ts.add(new Student("lisi4",14));
        //ts.add(new Student(39));
        ts.add(new Student("lisi7",27));



        System.out.println(ts);
    }
}

class StudentComparatorByName implements Comparator
{
    public int compare(Object o1,Object o2)
    {
        Student s1 = (Student)o1;
        Student s2 = (Student)o2;

        int num = s1.getName().compareTo(s2.getName());
        return num==0?new Integer(s1.getAge()).compareTo(new Integer(s2.getAge())):num;
    }
}


//同姓名同年龄的学生视为同一个学生。按照学生的年龄排序。
class Student implements Comparable
{
    private int age;
    private String name;
    Student(String name,int age)
    {
        this.age = age;
        this.name = name;
    }

    public int compareTo(Object obj)
    {
        
        Student stu = (Student)obj;
        
        int num = new Integer(this.age).compareTo(new Integer(stu.age));

        return num==0?this.name.compareTo(stu.name):num;

        /*
        if(this.age>stu.age)
            return 1;
        if(this.age==stu.age)
            return this.name.compareTo(stu.name);
        return -1;
        */
        /**/
    }

    public int getAge()
    {
        return age;
    }
    public String getName()
    {
        return name;
    }
    public String toString()
    {
        return name+"::"+age;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值