Java 中的排序技术

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

排序是计算机科学中的一项重要操作,Java 提供了多种内置方法来对不同的数据结构进行排序。Java 中有不同的类可用于对不同的数据结构进行排序。在本实验中,我们将探索如何对数组、集合以及用户定义的类实例进行排序。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/DataStructuresGroup -.-> java/sorting("Sorting") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashmap("HashMap") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashset("HashSet") subgraph Lab Skills java/arrays -.-> lab-117987{{"Java 中的排序技术"}} java/arrays_methods -.-> lab-117987{{"Java 中的排序技术"}} java/sorting -.-> lab-117987{{"Java 中的排序技术"}} java/collections_methods -.-> lab-117987{{"Java 中的排序技术"}} java/arraylist -.-> lab-117987{{"Java 中的排序技术"}} java/hashmap -.-> lab-117987{{"Java 中的排序技术"}} java/hashset -.-> lab-117987{{"Java 中的排序技术"}} end

排序数组

数组是一种简单的数据结构,用于以有序的方式存储相似类型的数据。我们可以使用 Arrays 类的内置 sort() 方法对数组进行排序。

以下代码演示了如何使用 sort() 方法对数组进行排序:

public static void main(String[] args) {
    int[] arr = {7, 9, 1, 0, 2, 5, 6, 11};
    System.out.println("Array Before Sorting: " + Arrays.toString(arr));
    Arrays.sort(arr);
    System.out.println("Array After Sorting: " + Arrays.toString(arr));
}

要运行此代码,请在终端中导航到 ~/project 目录并执行以下命令:

$ javac Sorting.java
$ java Sorting

此代码将按升序对数组进行排序。如果你想按降序对数组进行排序,则需要使用 Comparator 接口进行排序。

排序集合

Java 提供了 Collections 类,其中包含一个 sort() 方法,用于对列表(list)、集合(set)和映射(map)等集合进行排序。该函数的操作模式与 Arrays 类的 sort() 方法类似。

以下代码演示了如何使用 sort() 方法对整数列表进行排序:

public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    list.add(6);
    list.add(3);
    list.add(8);
    list.add(1);
    list.add(9);

    System.out.println("List before sorting: " + list);

    Collections.sort(list);
    System.out.println("List after sorting: " + list);
}

要运行此代码,请在终端中导航到 ~/project 目录并执行以下命令:

$ javac Sorting.java
$ java Sorting

排序集合(Set)

集合(Set)用于存储无序且不重复的数据。我们不能直接使用 Collections 类的 sort() 方法对集合进行排序。然而,我们可以通过将集合中的所有元素转移到列表中,然后对列表进行排序来查看有序数据。

以下代码演示了如何使用 sort() 方法对整数集合进行排序:

public static void main(String[] args) {
    Set<Integer> set = new HashSet<Integer>();
    set.add(6);
    set.add(3);
    set.add(-2);
    set.add(1);
    set.add(9);

    List<Integer> list = new ArrayList<Integer>(set);
    Collections.sort(list);
    System.out.println("Set after sorting: " + list);
}

要运行此代码,请在终端中导航到 ~/project 目录并执行以下命令:

$ javac Sorting.java
$ java Sorting

此代码的输出将是一个排序后的整数列表。

排序映射(Map)

映射(Map)用于存储键值对。我们可以根据键或值对映射进行排序。TreeMap 也可以用于以排序顺序存储键值对。

以下代码演示了如何使用 sort() 方法对整数映射进行排序:

public static void main(String[] args) {
    Map<Integer, String> map = new TreeMap<Integer, String>();
    map.put(6, "Apple");
    map.put(3, "Banana");
    map.put(1, "Mango");
    map.put(9, "Orange");

    System.out.println("Map before sorting: " + map);

    // Sorting by keys
    Map<Integer, String> sortedByKeyMap = new TreeMap<Integer, String>(map);
    System.out.println("Map after sorting by keys: " + sortedByKeyMap);

    // Sorting by value
    List<Map.Entry<Integer, String>> list = new ArrayList<Map.Entry<Integer, String>>(map.entrySet());
    Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
        public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
            return (o1.getValue()).compareTo(o2.getValue());
        }
    });

    Map<Integer, String> sortedByValueMap = new LinkedHashMap<Integer, String>();
    for (Map.Entry<Integer, String> entry : list) {
        sortedByValueMap.put(entry.getKey(), entry.getValue());
    }
    System.out.println("Map after sorting by values: " + sortedByValueMap);
}

要运行此代码,请在终端中导航到 ~/project 目录并执行以下命令:

$ javac Sorting.java
$ java Sorting

此代码将根据键和值对映射进行排序。

总结

本实验演示了如何在 Java 中对不同的数据结构进行排序。我们学习了如何对数组、集合和映射进行排序。此外,我们还学习了如何使用 ComparableComparator 接口对用户定义的类对象进行排序。通过 CollectionsArrays 类的 sort() 方法,我们对列表和数组进行了排序。最后,我们学习了如何根据键和值对映射进行排序。