Java 中的排序技术

JavaBeginner
立即练习

简介

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

数组排序

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

~/project 目录下创建或替换 Sorting.java 文件,并写入以下代码:

import java.util.Arrays;

public class Sorting {
    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 类,其中包含用于对列表(List)、集合(Set)和映射(Map)等集合进行排序的 sort() 方法。该函数的运行模式与 Arrays 类的 sort() 方法类似。

~/project 目录下创建或替换 Sorting.java 文件,并写入以下代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Sorting {
    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() 方法对 Set 进行排序。但是,我们可以通过将 Set 中的所有元素转移到 List 中,然后再对 List 进行排序,从而查看有序的数据。

~/project 目录下创建或替换 Sorting.java 文件,并写入以下代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Sorting {
    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 用于存储键值对。我们可以根据键(Key)或值(Value)对 Map 进行排序。TreeMap 也可以用来以排序顺序存储键值对。

~/project 目录下创建或替换 Sorting.java 文件,并写入以下代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Sorting {
    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

这段代码将分别按键和值对 Map 进行排序。

总结

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