如何在Java中对Collection对象进行排序?

排序集合的对象

  • 这个概念与排序有关,在这里我们将看到如何对Collection上的对象进行排序?

  • 在Java中,我们有实用程序类Collections,它提供了执行各种任务的各种方法,并且Collection类的方法之一与sort有关sort()

  • 我们可以通过两种方式对Collection对象实施排序:

    1. 通过使用可比

    2. 通过使用比较器

  • 当我们调用Collections.sort()时。它根据compareTo()方法中指定的自然排序或默认排序(即升序)对对象进行排序。

  • 当我们调用Collections.sort(Comparator)时。它根据在compare()Comparator方法中指定的自定义排序(即升序或降序)对对象进行排序。

我们将一一看到排序方式...

1)通过使用比较器

  • 如果我们在Collection类构造函数中传递Comparator对象,compare()则将执行我们的方法。

  • 当我们想要自定义排序时,我们应该选择比较器。

  • 使用Comparator接口可以实现自定义排序。(自定义排序意味着根据我们的需要是升序还是降序)。

示例

import java.util.*;

class TreeSetClass {
    public static void main(String[] args) {
        //中传递Comparator对象 
        //定制排序的类构造器
        TreeSet ts = new TreeSet(new CustomizeSorting());

        //将元素添加到TreeSet-
        ts.add(10);
        ts.add(40);
        ts.add(30);
        ts.add(20);

        //自定义排序列表
        System.out.println("Customize sorting :" + ts);
    }
}

//这里我们正在实现Comparator接口
class CustomizeSorting implements Comparator {
    //这是compare()比较器的叠加方法
    public int compare(Object obj1, Object obj2) {

        Integer i1 = (Integer) obj1;
        Integer i2 = (Integer) obj2;

        return -i1.compareTo(i2);
    }
}

输出结果

E:\Programs>javac TreeSetClass.java

E:\Programs>java TreeSetClass
Customize sorting :[40, 30, 20, 10]

2)使用可比接口

  • 对于预定义的可比较类,默认的自然排序已可用。

  • 对于预定义的不可比较类,默认自然排序尚不可用。

  • 为了让我们的自定义类定义自然排序,我们应该选择Comparable。

  • 在默认情况下,自然排序强制对象应该是同质且可比较的,否则我们将获得CCE(ClassCastException)。

示例

import java.util.*;

class TreeSetClass {
    public static void main(String[] args) {
        Student s1 = new Student(10);
        Student s2 = new Student(30);
        Student s3 = new Student(70);
        Student s4 = new Student(20);

        //传递Comparator对象 
        //用于默认排序的类构造函数
        TreeSet ts = new TreeSet();

        //将元素添加到TreeSet-
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);

        //自定义排序列表
        System.out.println("Default sorting :" + ts);
    }
}

//这里我们正在实现Comparable接口
class Student implements Comparable {
    int code;

    Student(int code) {
        this.code = code;
    }

    public String toString() {
        return " Code - " + code;
    }

    //这里我们是compare()Comparable接口的覆盖方法
    public int compareTo(Object obj) {
        int code1 = this.code;
        Student intermediate = (Student) obj;
        int code2 = intermediate.code;

        if (code1 < code2)
            return -1;
        else if (code1 > code2)
            return +1;
        else
            return 0;
    }
}

输出结果

E:\Programs>javac TreeSetClass.java

E:\Programs>java TreeSetClass
Default sorting :[ Code - 10,  Code - 20,  Code - 30,  Code - 70]