首页 > 其他分享 >ArrayList排序几种方法

ArrayList排序几种方法

时间:2024-04-08 21:31:34浏览次数:20  
标签:name students ArrayList 几种 Student 排序 age

ArrayList是有序的吗?
是的,ArrayList在java中是有序的,其内部
ArrayList本身不具备内置的排序功能,但可以通过java提供的Collections.sort()方法或者java8及以后版本引入的Stream API来进行排序
以下是几种对ArrayList排序的方法:
1.使用Collections.sort()方法配合Comparable接口:如果ArrayList中元素实现了comparable接口(比如Integer,String等已经实现了Comparable的类型),可以直接调用:
2.使用Collections.sort()方法配合Comparator接口:当需要自定义排序规则时,可以创建一个Comparator实现类,并将其作为参数传给Collections.sort()方法
3.使用List的sort()方法(java8以上的版本):java8引入了Lambda表达式和StreamAPI,可以直接在ArrayList上调用sort()方法,并传递一个Comparator
4.使用StreamAPI进行排序(java8以上的版本)

package a_od_test;

import java.util.*;
import java.util.stream.Collectors;

/*
ArrayList是有序的吗?
是的,ArrayList在java中是有序的,其内部
ArrayList本身不具备内置的排序功能,但可以通过java提供的Collections.sort()方法或者java8及以后版本引入的Stream API来进行排序
以下是几种对ArrayList排序的方法:
1.使用Collections.sort()方法配合Comparable接口:如果ArrayList中元素实现了comparable接口(比如Integer,String等已经实现了Comparable的类型),可以直接调用:
2.使用Collections.sort()方法配合Comparator接口:当需要自定义排序规则时,可以创建一个Comparator实现类,并将其作为参数传给Collections.sort()方法
3.使用List的sort()方法(java8以上的版本):java8引入了Lambda表达式和StreamAPI,可以直接在ArrayList上调用sort()方法,并传递一个Comparator
4.使用StreamAPI进行排序(java8以上的版本)
 */
public class Main27_ArrayList_sort {
    public static void main(String[] args) {
//        sort1();
//        sort2();
//        sort3();
        sort4();

    }

    //方法1
    public static void sort1() {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(3);
        list.add(5);
        list.add(4);
        list.add(2);
        //[1, 3, 5, 4, 2]
        System.out.println("排序前: " + list);
        Collections.sort(list);
        //[1, 2, 3, 4, 5]
        System.out.println("排序前: " + list);
    }

    //方法2
    public static void sort2() {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("zs", 16));
        students.add(new Student("ls", 19));
        students.add(new Student("ww", 15));
//        排序前: [Student{name='zs', age=16}, Student{name='ls', age=19}, Student{name='ww', age=15}]
        System.out.println("排序前: " + students);
        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //按姓名排序
//                return o1.name.compareTo(o2.name);
                //按年龄排序
                return Integer.compare(o1.age, o2.age);
            }
        });
//        排序后: [Student{name='ls', age=19}, Student{name='ww', age=15}, Student{name='zs', age=16}]
        System.out.println("排序后: " + students);

    }


    //方法3
    public static void sort3() {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("zs", 16));
        students.add(new Student("ls", 19));
        students.add(new Student("ww", 15));
//        排序前: [Student{name='zs', age=16}, Student{name='ls', age=19}, Student{name='ww', age=15}]
        System.out.println("排序前: " + students);
//        students.sort(Comparator.comparing(student -> student.name));
        students.sort(Comparator.comparing(student -> student.age));
        System.out.println("排序后: " + students);

    }

    //方法4
    public static void sort4() {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("zs", 16));
        students.add(new Student("ls", 19));
        students.add(new Student("ww", 15));
//        排序前: [Student{name='zs', age=16}, Student{name='ls', age=19}, Student{name='ww', age=15}]
        System.out.println("排序前: " + students);
//        List<Student> newStudents = students.stream().sorted(Comparator.comparing(student -> student.name)).collect(Collectors.toList());
        List<Student> newStudents = students.stream().sorted(Comparator.comparing(student -> student.age)).collect(Collectors.toList());
        System.out.println("排序后: " + newStudents);

    }
}

class Student {
    String name;
    int age;
    //构造函数, getter, setter...
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

标签:name,students,ArrayList,几种,Student,排序,age
From: https://blog.csdn.net/weixin_45547818/article/details/137524509

相关文章

  • 【数据结构与算法】:堆排序和选择排序
    1.堆排序堆排序是一种比较复杂的排序算法,因为它的流程比较多,理解起来不会像冒泡排序和选择排序那样直观。1.1堆的结构要理解堆排序,首先要理解堆。堆的逻辑结构是一棵完全二叉树,物理结构是一个数组。(如果不知道什么是二叉树,请前往我的主页查看)。所以堆是一个用数组表......
  • 几种获取免费SSL证书的方式
    自2018年七月开始,Chrome将所有未安装使用SSL证书的网站皆标记为“不安全”。在访问未安装部署SSL证书网站时经常会出现风险提示,而拥有SSL证书的网站在权重排名上会有一定提升。当然网站部署SSL证书最主要的意义还是在于网络安全防范和普及https,甚至于现在的小程序在应用过程......
  • 【每周例题】蓝桥杯 C++ 对称排序
    对称排序题目对称排序 题目分析1.因为数字是对称交换,所以我们只需要判断前n/2项需不需要交换就好了2.这里我采用了升序排序,你们也可以尝试降序排序3.我们只需要排序好后再遍历一下整个数组,找出不符合排序的就输出NO就好了代码#include<iostream>#include<bits/stdc+......
  • 1022: 三整数排序(c语言)
    题目描述从键盘输入三个整数x,y和z,按从大到小的顺序输出它们的值。输入输入三个整数x,y和z。输出按从大到小的顺序输出它们的值。样例输入 201618样例输出 201816#include<stdio.h>intmain(){ intx=0,y=0,z=0; scanf("%d%d%d",&x,&y,&z);......
  • 冒泡排序
     1#include<stdio.h>2intmain(){34intarr[5];5printf("pleaseinputfivenumber:");6for(inti=0;i<5;i++){7scanf("%d",&arr[i]);8}9for(inti=0;i<5;i......
  • 什么是插入排序
    一、什么是插入排序插入排序是一种最简单的排序方法,其基本思想是将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素进行遍历,内层循环对当前元素前面有序表进行待插入位置查找,并进行移......
  • 常见的排序算法——插入排序(二)
    本文记述了插入排序微小改进的基本思想和一份参考实现代码,并在说明了算法的性能后用实验进行了验证。◆思想内存中的数据交换是昂贵的操作,此改进实现了不需要交换的插入排序。将第一个元素之后的所有元素作为待排序范围,将前面的所有元素作为已排序范围。通过一一比较,逐个将已......
  • 【数据结构(二)】顺序表与ArrayList
    ❣博主主页:33的博客❣▶文章专栏分类:数据结构◀......
  • 二叉排序树(BST)
    定义二叉排序树是一种特殊的二叉树,其中左子树中的所有节点都小于根节点,右子树中的所有节点都大于根节点(如下图所示)。因此构造过程需要确保插入的元素能够按照这个规则被正确地插入到树中性质1、如果初始状态是一个空树,则插入每个元素的时间复杂度是O(logn),其中n是树中节......
  • 三种算法实例(二分查找算法、插入排序算法、贪心算法)
    当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。在正式探讨算法之前,有一个有趣的事实值得分享:你已经在不知不觉中学会了许多算法,并习惯将它们应用到日常生活中了。下面我将举......