Java中集合和数组的排序方式小结

Java中集合和数组的排序方式小结

数组排序

Java中可以使用Arrays类提供的sort()方法对数组进行排序。sort()方法有两个重载版本:

sort(int[] a):对int类型的数组进行升序排序

sort(Object[] a):对实现了Comparable接口的对象数组进行升序排序

示例1:对int类型的数组进行升序排序

int[] arr = {3, 1, 7, 2, 5};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // 输出 [1, 2, 3, 5, 7]

示例2:对包含自定义类的对象数组进行升序排序

class Student implements Comparable<Student> {
    private int id;
    private String name;
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    @Override
    public int compareTo(Student student) { // 重写compareTo方法
        return this.id - student.getId();
    }
}

Student[] students = {
    new Student(3, "Tom"),
    new Student(1, "Bob"),
    new Student(2, "Alice"),
    new Student(4, "John"),
    new Student(5, "Mike")
};
Arrays.sort(students);
for (Student stu : students) { // 遍历输出
    System.out.println(stu.getId() + " " + stu.getName());
}

上述代码中自定义了一个Student类,实现了Comparable接口,并重写了compareTo()方法。在排序时,会根据compareTo方法的返回值进行比较和排序。

集合排序

Java中可以使用Collections类提供的sort()方法对集合进行排序。sort()方法有一个重载版本:

sort(List<T> list):对实现了Comparable接口的对象集合进行升序排序

示例1:对包含自定义类的对象集合进行升序排序

List<Student> students = new ArrayList<>();
students.add(new Student(3, "Tom"));
students.add(new Student(1, "Bob"));
students.add(new Student(2, "Alice"));
students.add(new Student(4, "John"));
students.add(new Student(5, "Mike"));
Collections.sort(students);
for (Student stu : students) { // 遍历输出
    System.out.println(stu.getId() + " " + stu.getName());
}

上述代码中使用List接口的实现类ArrayList来存储Student类型的对象,然后使用Collections类的sort()方法进行排序,排序时会自动调用compareTo方法进行比较和排序。

自定义排序方式

如果需要按照其他方式进行排序,可以使用Comparator接口来自定义排序方式。Comparator接口有一个compare()方法来实现自定义排序方式,sort()方法也有一个重载版本接收一个Comparator实现。

示例2:按照姓名进行降序排序

List<Student> students = new ArrayList<>();
students.add(new Student(3, "Tom"));
students.add(new Student(1, "Bob"));
students.add(new Student(2, "Alice"));
students.add(new Student(4, "John"));
students.add(new Student(5, "Mike"));
Comparator<Student> comparator = new Comparator<Student>() { // 自定义排序方式
    @Override
    public int compare(Student student1, Student student2) {
        return student2.getName().compareTo(student1.getName()); // 按照姓名进行降序排序
    }
};
Collections.sort(students, comparator);
for (Student stu : students) { // 遍历输出
    System.out.println(stu.getId() + " " + stu.getName());
}

上述代码中创建了一个Comparator接口的匿名实现来自定义排序方式,按照姓名进行降序排序。然后在sort()方法里传入comparator实现来进行排序。

小结

Java中可以使用Arrays类和Collections类的sort()方法对数组和集合进行升序排序。如果需要按照自定义方式进行排序,可以实现Comparable接口或使用Comparator接口来自定义排序方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中集合和数组的排序方式小结 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Javascript实现快速排序(Quicksort)的算法详解

    Javascript实现快速排序的算法详解 在这个攻略中,我们将通过Javascript实现快速排序算法,并讲解算法的详细过程。 快速排序的基本思想 快速排序是一种基于交换的排序算法,其基本思想是通过选择一个基准元素,在一趟排序过程中,将之前需要排序的序列中的元素分割成两个部分,其中,左边部分元素的值都小于基准元素的值,右边部分元素的值都大于基准元素的值,然…

    算法与数据结构 2023年5月19日
    00
  • JavaScript插入排序算法原理与实现方法示例

    JavaScript插入排序算法原理与实现方法示例 算法原理 插入排序是一种简单直观的排序算法,其基本原理是将一个待排序的数组依次插入一个有序的数组中,使得最终生成的有序数组是全局有序的。每次将一个待排序的元素插入到有序数组中时,我们从有序数组的末尾开始比较,如果待排序的元素比当前比较的元素小,则交换位置,继续比较,否则插入到当前位置。 实现方法 下面是Ja…

    算法与数据结构 2023年5月19日
    00
  • C语言详细讲解qsort函数的使用

    C语言详细讲解qsort函数的使用 qsort函数简介 在C语言中,qsort函数是一个标准库函数,用于将一个数组排序。它使用快速排序算法,实现了高效的排序。qsort函数的原型定义如下: void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void…

    算法与数据结构 2023年5月19日
    00
  • JS中多层次排序算法的实现代码

    让我为你介绍一份JS中多层次排序算法的实现代码攻略。 简介 多层次排序是指一个列表需要依据不同的规则进行排序,例如按照价格、销量、评分等进行排序。在JS中,我们可以通过自定义排序函数实现多层次排序。 实现 以下是实现多层次排序的示例代码: const products = [ { name: ‘iPhone 11’, price: 799, sales: 1…

    算法与数据结构 2023年5月19日
    00
  • 解析左右值无限分类的实现算法

    下面为你详细讲解“解析左右值无限分类的实现算法”的完整攻略: 1. 了解左右值无限分类 左右值无限分类,也称为嵌套集合模型,是一种常见的无限分类方式。在该模型中,每个分类都有一个左值和右值,通过比较左右值大小,可以判断出一个分类是否是另一个分类的子分类或者父分类。支持多层级分类,可以无限嵌套。 2. 左右值无限分类的实现算法 左右值无限分类的实现算法分为两步…

    算法与数据结构 2023年5月19日
    00
  • PHP两种快速排序算法实例

    下面是对PHP两种快速排序算法实例的详细讲解: 1. 快速排序算法介绍 快速排序属于交换排序的一种,是目前应用最广泛的排序算法之一,也是学习算法的重要内容。快速排序算法的基本思想是通过将待排序序列进行划分,并不断递归对子序列进行排序,完成整个序列的排序。 快速排序的基本步骤如下: 选择一个基准值(pivot)。 将待排序数组中小于基准值的元素移动到数组左侧,…

    算法与数据结构 2023年5月19日
    00
  • redis zset实现滑动窗口限流的代码

    Redis ZSET(有序集合)非常适合实现滑动窗口限流。下面是实现滑动窗口限流的Redis ZSET代码攻略: 步骤一:定义一个键和窗口大小 为了使用Redis ZSET实现滑动窗口限流,您需要为每个限流器定义一个键。键的值将存储在Redis Sorted Set中,并且每个元素将具有其分数。我们将使用时间戳作为分数。此外,需要指定每个限制限流器的窗口大小…

    算法与数据结构 2023年5月19日
    00
  • JavaScript算法学习之冒泡排序和选择排序

    JavaScript算法学习之冒泡排序和选择排序 冒泡排序和选择排序是常见的两种排序算法。在本文中,我们将详细讲解这两种排序算法,并提供代码示例供读者参考。 冒泡排序 冒泡排序是一种简单的排序算法,它通过比较相邻两个元素的大小,依次将最大的元素冒泡到数组的末尾。 以下是冒泡排序的代码示例: function bubbleSort(array) { const…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部