📜  如何在Java对 LinkedList 进行排序?(1)

📅  最后修改于: 2023-12-03 15:08:55.591000             🧑  作者: Mango

如何在Java对 LinkedList 进行排序?

在Java中,可以使用 Collections 类对 LinkedList 进行排序。Collections 类提供了多种排序算法,如快速排序、归并排序等。

下面是一个示例程序,演示了如何使用 Collections.sort() 方法对 LinkedList 进行排序:

import java.util.Collections;
import java.util.LinkedList;

public class LinkedListSortingExample {
    public static void main(String[] args) {
        LinkedList<Integer> numbers = new LinkedList<>();
        numbers.add(5);
        numbers.add(1);
        numbers.add(9);
        numbers.add(4);
        numbers.add(3);

        System.out.println("Before sorting: " + numbers);

        Collections.sort(numbers);

        System.out.println("After sorting: " + numbers);
    }
}

上述程序使用 LinkedList 存储整数,并使用 Collections.sort() 方法对其进行排序。输出如下:

Before sorting: [5, 1, 9, 4, 3]
After sorting: [1, 3, 4, 5, 9]

需要注意的是,LinkedList 中存储的元素类型必须实现 Comparable 接口,或者使用另一个参数指定 Comparator 对象。例如,对于存储自定义类型的 LinkedList,需要实现该类型的比较方法,或者创建一个比较器对象。

下面是一个示例程序,演示了如何使用自定义比较器对 LinkedList 中的字符串按照长度排序:

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;

public class LinkedListSortingExample {
    public static void main(String[] args) {
        LinkedList<String> words = new LinkedList<>();
        words.add("apple");
        words.add("banana");
        words.add("orange");
        words.add("pear");
        words.add("kiwi");

        System.out.println("Before sorting: " + words);

        Comparator<String> lengthComparator = new Comparator<String>() {
            public int compare(String s1, String s2) {
                return s1.length() - s2.length();
            }
        };
        Collections.sort(words, lengthComparator);

        System.out.println("After sorting: " + words);
    }
}

上述程序使用自定义比较器对 LinkedList 中的字符串按照长度排序。输出如下:

Before sorting: [apple, banana, orange, pear, kiwi]
After sorting: [kiwi, pear, apple, banana, orange]

需要注意的是,在创建比较器对象时,可以使用 lambda 表达式(Java 8 及以上版本)来简化代码:

Comparator<String> lengthComparator = (s1, s2) -> s1.length() - s2.length();