Java:sort方法如何给对象进行排序?

当需要使用Arrays.sort()或者Collections.sort()方法对一个非基本数据类型的集合进行排序时。

  1、可以让这个类实现Comparable接口,重写compareTo方法(排序规则)。

  2、可以使用Comparator接口的实现类,重写compare方法。

 


一、Comparable接口

  1、需要排序的类实现此接口,实现排序方法compareTo方法。

  2、使用sort方法进行排序。

例子:

  Man类在排序时,先使用age进行排序,若age一致,则根据salary进行排序。

public class Man implements Comparable<Man> {
    private int age;
    private double salary;

    /**
     * 排序规则:
     * 1.返回值大于0,则大于传进来的值
     * 2.返回值等于0,则等于
     * 3.返回值小于0,则小于传进来的值
     */
    @Override
    public int compareTo(Man man) {
        if(this.age-man.age!=0){
            //年龄小的在前
            return this.age-man.age;
        }else if(this.salary- man.salary!=0){
            //工资小的在前
            return (int) (this.salary- man.salary);
        }else {
            return 0;
        }
    }

测试:

    public static void main(String[] args) {
        Man t1 = new Man(11,7000);//2
        Man t2 = new Man(33,7000);//4
        Man t3 = new Man(11,3000);//1
        Man t4 = new Man(33,5000);//3
        Man[] man = {t1,t2,t3,t4};
        //冒泡排序,升序
        Arrays.sort(man);
        for (Man m:man) {
            System.out.println(m);
        }
    }

结果:

 


 

二、Comparator接口

  一般采取匿名内部类的形式进行调用。

例子:

    public static void main(String[] args) {
        Man t1 = new Man(11,7000);//2
        Man t2 = new Man(33,7000);//4
        Man t3 = new Man(11,3000);//1
        Man t4 = new Man(33,5000);//3
        Man[] man = {t1,t2,t3,t4};

        //冒泡排序
        Arrays.sort(man, new Comparator<Man>() {
            @Override
            public int compare(Man man, Man t1) {
                //年龄大的在前
                if(t1.getAge()- man.getAge()!=0) {
                    return t1.getAge() - man.getAge();
                }else if(t1.getSalary()-man.getSalary()!=0){
                    //工资高的在前
                    return (int) (t1.getSalary()-man.getSalary());
                }else {
                    return 0;
                }
            }
        });
        for(Man m:man){
            System.out.println(m);
        }
  }

结果:

 

posted @ 2022-11-02 15:30  在博客做笔记的路人甲  阅读(601)  评论(0编辑  收藏  举报