Comparable的compareTo

这篇博客介绍了Java中TreeSet集合如何进行排序以及如何保证元素唯一性。通过实现Comparable接口并重写compareTo方法,使得对象具备自然排序能力。同时,TreeSet利用Comparator接口的子类对象在构造时指定特定的比较方式,确保元素不重复。示例代码展示了如何创建一个包含姓名和年龄的对象并进行排序存储,输出结果为排序后的姓名和年龄。
摘要由CSDN通过智能技术生成

       我们可以对Set集合中的元素进行排序。使用的是二叉树结构。如何保证元素唯一性的呢?使用的对象比较方法的结果是否为0,是0,视为相同元素不存。元素自身具备自然排序,其实就是实现了Comparable接口重写了compareTo方法。

有一个叫做Comparator的接口,并且TreeSet集合的接口允许我们给其传递这样一个接口的子类对象。其实就是在创建TreeSet集合时,在构造函数中指定具体的比较方式。需要定义一个类实现。只需要这个对象实现Comparable接口,并实现其中的compareTo方法即可。

创建对象

public class practice implements Comparable {


    private String name;
    private int age;

    public practice () {

    }

    public String getName () {
        return name;
    }

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

    public int getAge () {
        return age;
    }

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


    public practice ( String name, int age ) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString () {
        return "practice{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo ( Object o ) {

        if (!(o instanceof practice)) {
            throw new ClassCastException("o is not a practice");
        }
        practice p = (practice) o;
        int res =  age - p.age;

        res = res != 0 ? res : name.compareTo(p.name);
        return res;
    }
}

进行储存

 public static void main ( String[] args ) {
        TreeSet set = new TreeSet();
     practice s1=new  practice("张三",22);
        practice s2=new  practice("王五",21);
        practice s3=new  practice("刘三",20);
        practice s4=new  practice("李四",24);
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        System.out.println(set);

    }

输出结果


[practice{name='刘三', age=20},

practice{name='王五', age=21},

practice{name='张三', age=22},

practice{name='李四', age=24}]


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值