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学习算法复杂度

    下面是关于如何用JavaScript学习算法复杂度的完整攻略: 1. 什么是算法复杂度? 算法复杂度指的是算法运行时间与输入数据规模之间的关系。通常使用大O表示法来表示算法的时间复杂度,即在最坏情况下,算法需要执行的基本操作次数和输入规模n的关系。从时间复杂度的角度出发,我们可以比较不同的算法及其优劣。 2. JavaScript中如何编写算法 JavaSc…

    算法与数据结构 2023年5月19日
    00
  • 全排列算法的非递归实现与递归实现的方法(C++)

    全排列算法是计算机科学领域中的一个经典问题,其功能是对给定的一组数进行全排列。在本文中,我们将对该算法的非递归实现和递归实现方法进行详细讲解。本文的代码示例基于C++语言。 非递归实现方法 算法思路 假设我们想对n个数进行全排列,那么我们可以首先将这n个数按照升序排列,然后使用以下步骤: 把这n个数的全排列问题转化为n-1个数的全排列问题; 依次取出每一个数…

    算法与数据结构 2023年5月19日
    00
  • TypeScript实现十大排序算法之归并排序示例详解

    TypeScript实现十大排序算法之归并排序示例详解 简介 本文将详细介绍使用 TypeScript 实现归并排序算法的步骤和示例。归并排序是一种非常有效的排序算法,它的时间复杂度为 O(nlogn),在大多数情况下都比快速排序更加稳定和可靠。 步骤 归并排序是一种典型的分治算法,其基本思路是将待排序的数组不断分割为较小的数组,直到每个小数组只有一个元素,…

    算法与数据结构 2023年5月19日
    00
  • 利用JavaScript在网页实现八数码启发式A*算法动画效果

    下面是利用JavaScript在网页实现八数码启发式A*算法动画效果的完整攻略: 简介 八数码问题是指在一个33的方格上,放置了1~8这八个数字,其中有一个空格可以移动,初态和目标态之间的变换最少需要几步。而启发式A算法是一种针对图形和网络中的路径规划问题的搜索算法。 利用JavaScript实现八数码启发式A*算法动画效果,可以帮助用户在屏幕上直观地看到计…

    算法与数据结构 2023年5月19日
    00
  • 常用的C语言排序算法(两种)

    常用的C语言排序算法(两种) 排序算法是计算机程序员经常用到的算法,在实际的开发中排序算法往往可以提升程序的效率。在C语言中常用的排序算法有很多种,其中比较常见的包括快速排序和冒泡排序两种。 快速排序 快速排序(Quick Sort)是一种分而治之的思想,它通过在数据集合中挑选一个基准数,将数据集合分成两部分,一部分大于基准数,一部分小于基准数,然后对这两部…

    算法与数据结构 2023年5月19日
    00
  • C#中使用快速排序按文件创建时间将文件排序的源码

    下面就来详细讲解如何在C#中使用快速排序按文件创建时间将文件排序的源码攻略。 1. 快速排序原理 快速排序(Quick Sort)是一种基于分治法的高效排序算法,其主要思想是选择一个基准点(pivot),将数组分为左右两个子数组,将左边的数组的元素都小于基准点,右边的数组的元素都大于基准点,再递归对左右子数组进行快排操作,直到子数组长度为1或0。快速排序的时…

    算法与数据结构 2023年5月19日
    00
  • JS实现数组随机排序的三种方法详解

    JS实现数组随机排序的三种方法详解 在JavaScript中,实现数组的随机排序是十分常见的需求。本篇文章将讲解三种实现数组随机排序的方法。 方法一:Fisher-Yates算法 Fisher-Yates算法(也被称为 Knuth算法)是实现数组随机排序最常用的算法之一。该算法的思路很简单,即从数组末尾开始,将当前位置的数与它之前的任意一个数交换顺序,直到数…

    算法与数据结构 2023年5月19日
    00
  • Python实现选择排序

    当我们需要对一个列表或数组进行排序时,选择排序是一种简单易懂的方法。Python是一种非常流行的编程语言,它可以轻松实现选择排序。 以下是Python实现选择排序的攻略: 选择排序的原理 选择排序是一种简单直观的排序算法,其基本思想是每次选择出最小的元素,放到已经排好序的部分的末尾。 实现步骤 找到未排序部分的最小元素; 将其放在已排序部分的末尾; 重复步骤…

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