• 通过实现Comparable接口结合TreeSet来对对象自动排序


    

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

    如遇到这样的需求:

    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方法即可。


  • 相关阅读:
    Queue
    Singly-Linked List
    Array
    HTTP请求详解
    封装element的API
    uniapp登录逻辑
    Selector学习笔记 (未完待续)
    <Scalable IO in Java>学习
    Spring PropertyMapper源码阅读笔记
    leetcode 字节跳动探索系列
  • 原文地址:https://www.cnblogs.com/jerry1999/p/4175933.html
Copyright © 2020-2023  润新知