📜  java 排序列表 - Java (1)

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

Java排序列表

Java是一个强大的面向对象编程语言,并且有很多内置的排序算法来对数组和列表进行排序。在本文中,我们将介绍Java中的一些排序算法。

内置排序方法

Java提供了一些内置的排序方法,例如:Arrays.sort()Collections.sort()

Arrays.sort()

Arrays.sort()是用来对Java数组进行排序的方法。它可以用来对基本数据类型数组和对象数组进行排序。

以下是基本数据类型数组的排序示例:

int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));

输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

以下是对象数组(按照某一属性)排序的示例:

Person[] persons = {new Person("Tom", 25), new Person("Jerry", 30), new Person("Alice", 20)};
Arrays.sort(persons, new Comparator<Person>() {
    @Override
    public int compare(Person o1, Person o2) {
        return Integer.compare(o1.getAge(), o2.getAge());
    }
});
System.out.println(Arrays.toString(persons));

输出结果为:[Person{name='Alice', age=20}, Person{name='Tom', age=25}, Person{name='Jerry', age=30}]

Collections.sort()

Collections.sort()是用来对Java集合进行排序的方法。它可以用来对List、Set和Map等集合进行排序。

以下是List集合的排序示例:

List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5));
Collections.sort(numbers);
System.out.println(numbers);

输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

以下是Map集合(按照value)排序的示例:

Map<String, Integer> map = new HashMap<>();
map.put("Tom", 25);
map.put("Jerry", 30);
map.put("Alice", 20);
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
    @Override
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
        return Integer.compare(o1.getValue(), o2.getValue());
    }
});
System.out.println(list);

输出结果为:[Alice=20, Tom=25, Jerry=30]

常用排序算法

除了Java内置的排序方法,我们还可以使用一些常用的排序算法来对数组和列表进行排序。以下是Java中常用的排序算法:

冒泡排序

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就将它们交换过来。走访数列的工作是重复地进行直到没有再需要交换。

以下是冒泡排序的示例:

int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
for (int i = 0; i < numbers.length - 1; i++) {
    for (int j = 0; j < numbers.length - i - 1; j++) {
        if (numbers[j] > numbers[j + 1]) {
            int temp = numbers[j];
            numbers[j] = numbers[j + 1];
            numbers[j + 1] = temp;
        }
    }
}
System.out.println(Arrays.toString(numbers));

输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

选择排序

选择排序是一种简单的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

以下是选择排序的示例:

int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
for (int i = 0; i < numbers.length - 1; i++) {
    int minIndex = i;
    for (int j = i + 1; j < numbers.length; j++) {
        if (numbers[j] < numbers[minIndex]) {
            minIndex = j;
        }
    }
    int temp = numbers[i];
    numbers[i] = numbers[minIndex];
    numbers[minIndex] = temp;
}
System.out.println(Arrays.toString(numbers));

输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

插入排序

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

以下是插入排序的示例:

int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
for (int i = 1; i < numbers.length; i++) {
    int key = numbers[i];
    int j = i - 1;
    while (j >= 0 && numbers[j] > key) {
        numbers[j + 1] = numbers[j];
        j--;
    }
    numbers[j + 1] = key;
}
System.out.println(Arrays.toString(numbers));

输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

总结

以上是Java中的一些排序算法和排序方法。对于小数据量的排序,使用内置的排序方法是最为方便和快捷的;对于大数据量的排序,我们可以使用常用的排序算法来更加高效地进行排序。