java对ArrayList中元素进行排序的几种方式总结

 更新时间:2024年08月19日 08:57:20   作者:Ez4Sterben  
在Java中,ArrayList类提供了多种排序方法,可以根据不同的需求选择适合的排序方法,下面这篇文章主要给大家介绍了关于java对ArrayList中元素进行排序的几种方式,需要的朋友可以参考下

一、使用Collections工具类

1、对基本类型排序

通过Collections.sort()对基本类型排序默认是以升序排序

// 1.Collections.sort()默认按照升序排序
List<Integer> integerList = new ArrayList<>();
Collections.addAll(integerList,1,2,6,5,5,4,55,4,5,5,4,5,2,4,6,2,45);
Collections.sort(integerList);
System.out.println(integerList);

2、对字符串类型排序

对字符串类型排序默认按照首字母a-z排序

// 2.对字符串类型排序
List<String> strings = new ArrayList<>();
Collections.addAll(strings,"d","gsf","trh","fsd","an");
Collections.sort(strings);
System.out.println(strings);

3、对对象排序

如何使用Collections对对象排序呢?

其实只需要让我们的数据类型实现Comparable接口即可,下面定义一个实现Comparable接口的学生类,并且实现compareTo方法,让学生类只比较年龄。

/**
 * 学生
 *
 * @author ez4sterben
 * @date 2023/07/18
 */
public class Student implements Comparable<Student> {

    private String id;
    private String name;
    private Integer age;
    private String sex;

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

    public Student(Integer age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public int compareTo(Student o) {
    	// 这种是升序
        return this.getAge() - o.getAge();
        // 这种是降序
        // return o.getAge() - this.getAge();
    }
}

排序方法和正常使用一样,直接把整个list传入即可

// 3.对对象排序
        List<Student> students = new ArrayList<>();
        Collections.addAll(students,
                new Student(18),
                new Student(26),
                new Student(20),
                new Student(16),
                new Student(12));
        System.out.println(students);
        Collections.sort(students);
        System.out.println(students);

二、使用stream流

// 2.lambda表达式
        Stream<Integer> sorted = integerList.stream().sorted();
        System.out.println(Arrays.toString(sorted.toArray()));

三、使用排序算法(以冒泡排序为例)

// 3.直接使用排序算法(以冒泡排序为例)
        for(int i = 0; i < integerList.size() - 1; i++){
            for(int j = 0; j < integerList.size() - i - 1; j++){
                if(integerList.get(j) > integerList.get(j + 1)){
                    Integer temp = integerList.get(j);
                    integerList.set(j, integerList.get(j + 1));
                    integerList.set(j + 1, temp);
                }
            }
        }
        System.out.println(integerList);

四、测试类整体代码

import java.util.*;
import java.util.stream.Stream;

/**
 * 数组列表排序
 *
 * @author ez4sterben
 * @date 2023/07/19
 */
public class ArrayListSort {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();
        Collections.addAll(integerList,1,2,6,5,5,4,55,4,5,5,4,5,2,4,6,2,45);
        // 1.Collections.sort()默认按照升序排序
        Collections.sort(integerList);
        System.out.println(integerList);
        // 2.对字符串类型排序
        List<String> strings = new ArrayList<>();
        Collections.addAll(strings,"d","gsf","trh","fsd","an");
        Collections.sort(strings);
        System.out.println(strings);
        // 3.对对象排序
        List<Student> students = new ArrayList<>();
        Collections.addAll(students,
                new Student(18),
                new Student(26),
                new Student(20),
                new Student(16),
                new Student(12));
        System.out.println(students);
        Collections.sort(students);
        System.out.println(students);

        // 2.lambda表达式
        Stream<Integer> sorted = integerList.stream().sorted();
        System.out.println(Arrays.toString(sorted.toArray()));

        // 3.直接使用排序算法(以冒泡排序为例)
        for(int i = 0; i < integerList.size() - 1; i++){
            for(int j = 0; j < integerList.size() - i - 1; j++){
                if(integerList.get(j) > integerList.get(j + 1)){
                    Integer temp = integerList.get(j);
                    integerList.set(j, integerList.get(j + 1));
                    integerList.set(j + 1, temp);
                }
            }
        }
        System.out.println(integerList);

    }
}

总结 

到此这篇关于java对ArrayList中元素进行排序的几种方式总结的文章就介绍到这了,更多相关java对ArrayList元素排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring-boot集成spring-security的oauth2实现github登录网站的示例

    spring-boot集成spring-security的oauth2实现github登录网站的示例

    本篇文章主要介绍了spring-boot集成spring-security的oauth2实现github登录网站的示例,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • SpringCloud整合Netty集群实现WebSocket的示例代码

    SpringCloud整合Netty集群实现WebSocket的示例代码

    文章主要介绍了SpringCloud整合Netty集群实现WebSocket的相关内容,包括服务注册和发现中心的配置,如使用Nacos、CommandLineRunner启动Netty服务等,还介绍了通过Redis实现消息发布订阅的机制,需要的朋友可以参考下
    2024-11-11
  • Java线程池的四种拒绝策略详解

    Java线程池的四种拒绝策略详解

    jdk1.5 版本新增了JUC并发编程包,极大的简化了传统的多线程开发,下面这篇文章主要介绍了Java线程池的四种拒绝策略的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 实例解析Java程序中正则表达式的贪婪模式匹配

    实例解析Java程序中正则表达式的贪婪模式匹配

    贪婪模式又叫最大匹配,X?、X*、X+、X{n,}都是最大匹配,例如你要用“<.+>”去匹配“a<tr>aava </tr>abb”,也许你所期待的结果是想匹配“<tr>”,但是实际结果却会匹配到“<tr>aava </tr>”,下面我们就来看具体看一下贪婪模式的使用.
    2016-05-05
  • springboot如何关掉tomcat容器

    springboot如何关掉tomcat容器

    这篇文章主要介绍了springboot如何关掉tomcat容器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java中的ThreadLocalMap源码解读

    Java中的ThreadLocalMap源码解读

    这篇文章主要介绍了Java中的ThreadLocalMap源码解读,ThreadLocalMap是ThreadLocal的内部类,是一个key-value数据形式结构,也是ThreadLocal的核心,需要的朋友可以参考下
    2023-09-09
  • 为什么在foreach循环中JAVA集合不能添加或删除元素

    为什么在foreach循环中JAVA集合不能添加或删除元素

    今天给大家带来的文章是关于Java的相关知识,文章围绕着为什么在foreach循环中JAVA集合不能添加或删除元素展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • SpringBoot-Admin实现微服务监控+健康检查+钉钉告警

    SpringBoot-Admin实现微服务监控+健康检查+钉钉告警

    本文主要介绍了SpringBoot-Admin实现微服务监控+健康检查+钉钉告警,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Spring boot中自定义Json参数解析器的方法

    Spring boot中自定义Json参数解析器的方法

    这篇文章主要介绍了Spring boot中自定义Json参数解析器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • mybatis查询SqlServer慢问题及解决

    mybatis查询SqlServer慢问题及解决

    这篇文章主要介绍了mybatis查询SqlServer慢问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论