通过实现Comparable接口结合TreeSet来对对象自动排序
发布日期:2021-06-29 18:31:04 浏览次数:2 分类:技术文章

本文共 1272 字,大约阅读时间需要 4 分钟。

经过会遇到这样的情况,对于某个对象数组或者链表要按照一定的规则进行排序,那么我们该怎么做呢?

如遇到这样的需求:
1.需求1
对于学生对象按照年龄进行排序,年龄小的排在前面。
单单看到这样的需求,实现起来是比较简单的,自己写个函数实现一下快速排序或者比较土的冒泡排序,按照年龄来排序就可以了。我们再看看下面的需求
2.需求2
对于学生对象,按照年龄进行排序,年龄小的排在前面,年龄相同的,身高小的排在前面。
3.需求3
对于学生对象,按照年龄进行排序,年龄小的排在前面;年龄相同的,身高小的排在前面;身高相同时,体重轻的排在前面。
。。。

这样的需求,可能会随着页面的复杂化,越来越来复杂,如果要自己去做的话,估计得多层嵌套了,逻辑非常复杂,那是否有现成的比较简单的机制呢。

答案就是实现Comparable接口。

具体样例如下:

public class Student implements Comparable{ 

    private int age; 
     
    public Student(int age) 
    { 
        this.age = age; 
    } 
    @Override 
    public int compareTo(Object obj) { 
        Student stu = (Student)obj; 
        if(this.age>stu.age) 
            return 1; 
        else if(this.age<stu.age) 
            return -1; 
        else 
            return 0; 
    } 
    public int getAge() { 
        return age; 
    } 
    public void setAge(int age) { 
        this.age = age; 
    } 
 

调用代码:

public static void main(String[] args) { 

    TreeSet<Student> treeSet = new TreeSet<Student>(); 
    treeSet.add(new Student(1)); 
    treeSet.add(new Student(3)); 
    treeSet.add(new Student(2)); 
    for(Student student:treeSet) 
    { 
        System.out.println(student.getAge()); 
    } 

输出结果:

1
2
3

可见自动按照年龄进行了排序,我们再修改一下代码,让学生按照年龄由大到排列:

public int compareTo(Object obj) { 

    Student stu = (Student)obj; 
    if(this.age>stu.age) 
        return -1; 
    else if(this.age<stu.age) 
        return 1; 
    else 
        return 0; 

输出结果:

3
2
1

由此可见,这种通过对象实现Comparable接口,结合TreeSet的方式来进行对象排序,还是十分方便的,而且逻辑比较简单,后续如果有变更,直接修改compareTo方法即可。

转载地址:https://cxyxy.blog.csdn.net/article/details/24189575 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:几个不常使用的java关键字:transient和volatile
下一篇:HashMap非线程安全分析

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月15日 23时37分30秒