博客
关于我
List集合排序找出其中的最大和最小值
阅读量:793 次
发布时间:2023-02-06

本文共 5625 字,大约阅读时间需要 18 分钟。

Java列表排序方法及找最大值最小值

一、简单的排序方法

使用Collections.sort方法对列表进行排序。这种方法适用于按自然顺序排序的场景,比如对整数列表进行升序排列。

import java.util.ArrayList;import java.util.Collections;import java.util.List;public class ListSort {    public static void main(String[] args) {        List
list = new ArrayList<>(); list.add(5); list.add(13); list.add(4); list.add(9); Collections.sort(list); System.out.println(list.toString()); }}

程序运行结果:[4, 5, 9, 13],按升序排列。


二、复杂数据类型的排序

对于自定义对象,实现Comparable接口并重写compareTo方法来定义排序规则。例如,根据用户的年龄排序。

import java.util.ArrayList;import java.util.Collections;import java.util.List;public class UserMax {    public static void main(String[] args) {        List
list = new ArrayList<>(); list.add(new User("张三", 5)); list.add(new User("李四", 30)); list.add(new User("王五", 19)); list.add(new User("陈十七", 17)); Collections.sort(list); System.out.println(list.toString()); }}class User implements Comparable
{ private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(User user) { return this.age - user.getAge(); }}

程序运行结果:按年龄升序排列[User [name=张三, age=5], User [name=陈十七, age=17], User [name=王五, age=19], User [name=李四, age=30]]


三、匿名内部类实现排序

匿名内部类可以在方法范围内覆盖原有的排序规则,提供自定义的Comparator逻辑。

import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class UserAnonymous {    public static void main(String[] args) {        List
list = new ArrayList<>(); list.add(new User("张三", 5)); list.add(new User("李四", 30)); list.add(new User("王五", 19)); list.add(new User("陈十七", 17)); Collections.sort(list, new Comparator
() { @Override public int compare(User u1, User u2) { int diff = u1.getAge() - u2.getAge(); if (diff > 0) return 1; if (diff < 0) return -1; return 0; } }); System.out.println(list.toString()); }}

程序运行结果与上一示例相同。


四、找出列表中的最大值和最小值

使用Collections.maxCollections.min方法直接获取最大值和最小值。

import java.util.ArrayList;import java.util.Collections;import java.util.List;public class ListSort {    public static void main(String[] args) {        List
list = new ArrayList<>(); list.add(5); list.add(13); list.add(4); list.add(9); Collections.sort(list); System.out.println("排序后列表:" + list.toString()); Integer max = Collections.max(list); Integer min = Collections.min(list); System.out.println("最大值:" + max); System.out.println("最小值:" + min); }}

程序运行输出:排序后列表:[4, 5, 9, 13]最大值:13最小值:4


五、自定义对象的最大值和最小值

实现Comparable接口后,直接使用Collections.maxCollections.min方法来找最大值和最小值。

import java.util.ArrayList;import java.util.Collections;import java.util.List;public class UserMaxMin {    public static void main(String[] args) {        List
list = new ArrayList<>(); list.add(new User("张三", 5)); list.add(new User("李四", 30)); list.add(new User("王五", 19)); list.add(new User("陈十七", 17)); User max = Collections.max(list); System.out.println("最大值:" + max.toString()); User min = Collections.min(list); System.out.println("最小值:" + min.toString()); }}class User implements Comparable
{ private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(User user) { return this.age - user.getAge(); }}

程序运行输出:最大值:User [name=李四, age=30]最小值:User [name=陈十七, age=17]


六、匿名内部类实现最大值和最小值

使用匿名内部类实现Comparator接口来定义比较逻辑,直接获取最大值和最小值。

import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class UserAnonymous {    public static void main(String[] args) {        List
list = new ArrayList<>(); list.add(new User("张三", 5)); list.add(new User("李四", 30)); list.add(new User("王五", 19)); list.add(new User("陈十七", 17)); User max = Collections.max(list, new Comparator
() { @Override public int compare(User u1, User u2) { int diff = u1.getAge() - u2.getAge(); if (diff > 0) return 1; if (diff < 0) return -1; return 0; } }); System.out.println("最大值:" + max.toString()); User min = Collections.min(list, new Comparator
() { @Override public int compare(User u1, User u2) { int diff = u1.getAge() - u2.getAge(); if (diff > 0) return 1; if (diff < 0) return -1; return 0; } }); System.out.println("最小值:" + min.toString()); }}

程序运行输出:最大值:User [name=李四, age=30]最小值:User [name=陈十七, age=17]

转载地址:http://skufk.baihongyu.com/

你可能感兴趣的文章
Linux运维必备!手把手教你搭建OpenFalcon监控系统
查看>>
Linux运维趋势
查看>>
Linux进程地址空间和虚拟内存
查看>>
Linux进程地址管理之mm_struct
查看>>
Linux进程堆栈状态分析实战
查看>>
Linux进程的实际用户ID和有效用户ID
查看>>
Linux进程管理实战指南:实用工具命令详解
查看>>
Linux进程间通信 - 共享内存
查看>>
Linux进程间通信——使用命名管道
查看>>
Linux进程间通信的秘密通道:IPC机制详解
查看>>
Linux远程连接wget、curl、scp命令详解
查看>>
linux递归参数-R(r)和-p的区别
查看>>
Linux通用应急响应脚本(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Linux逻辑卷管理实战
查看>>
Linux部署Elasticsearch(一):下载和部署Elasticsearch
查看>>
Linux部署Elasticsearch(二):启动Elasticsearch不成功的几种原因
查看>>
Linux部署Oracle
查看>>
Linux部署Tomcat
查看>>
Linux部署Tomcat踩的坑以及解决方案【8080无法访问、日志显示XX端口被占用、修改默认端口、无法提供安全连接】
查看>>
Linux部署前后端分离项目(SpringBoot+Vue)【Nginx部署】
查看>>