如何在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]