对List数组进行排序的三种方法

list排序 立即下载
Collections对List集合中的数据进行排序

有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到

Java中提供的对集合进行操作的工具类Collections,其中的sort方法


先看一个简单的例子:

[java]  view plain  copy
  1. public static void main(String[] args) {  
  2.     List<Integer> nums = new ArrayList<Integer>();  
  3.         nums.add(3);  
  4.         nums.add(5);  
  5.         nums.add(1);  
  6.         nums.add(0);  
  7.         System.out.println(nums);  
  8.         Collections.sort(nums);  
  9.         System.out.println(nums);  
  10. }  
输出结果:
[3, 5, 1, 0]
[0, 1, 3, 5]

稍微复杂的List里面放一个复杂的对象

[java]  view plain  copy
  1. package core.java.collection.collections;  
  2.   
  3. public class User implements Comparable<User>{  
  4.       
  5.     private int score;  
  6.       
  7.     private int age;  
  8.       
  9.     public User(int score, int age){  
  10.         super();  
  11.         this.score = score;  
  12.         this.age = age;  
  13.     }  
  14.   
  15.     public int getScore() {  
  16.         return score;  
  17.     }  
  18.   
  19.     public void setScore(int score) {  
  20.         this.score = score;  
  21.     }  
  22.   
  23.     public int getAge() {  
  24.         return age;  
  25.     }  
  26.   
  27.     public void setAge(int age) {  
  28.         this.age = age;  
  29.     }  
  30.   
  31.     @Override  
  32.     public int compareTo(User o) {  
  33.         int i = this.getAge() - o.getAge();//先按照年龄排序  
  34.         if(i == 0){  
  35.             return this.score - o.getScore();//如果年龄相等了再用分数进行排序  
  36.         }  
  37.         return i;  
  38.     }  
  39.       
  40. }  
  41.   
  42. public static void main(String[] args) {  
  43.         List<User> users = new ArrayList<User>();  
  44.         users.add(new User(78, 26));  
  45.         users.add(new User(67, 23));  
  46.         users.add(new User(34, 56));  
  47.         users.add(new User(55, 23));  
  48.         Collections.sort(users);  
  49.         for(User user : users){  
  50.             System.out.println(user.getScore() + "," + user.getAge());  
  51.         }  
  52. }  
输出结果:
55,23
67,23
78,26
34,56
我们会发现sort(List<T>)方法中List中的T必须实现Comparable<T>接口,然后实现
compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;为什么
在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现
了Comparable接口,Java已经给我们做好了。

Collections提供的第二种排序方法sort(List<T> list, Comparator<? super T> c)
先看例子:
[java]  view plain  copy
  1. package core.java.collection.collections;  
  2.   
  3. public class Students {  
  4.       
  5.     private int age;  
  6.     private int score;  
  7.       
  8.     public Students(int age, int score){  
  9.         super();  
  10.         this.age = age;  
  11.         this.score = score;  
  12.     }  
  13.       
  14.     public int getAge() {  
  15.         return age;  
  16.     }  
  17.     public void setAge(int age) {  
  18.         this.age = age;  
  19.     }  
  20.     public int getScore() {  
  21.         return score;  
  22.     }  
  23.     public void setScore(int score) {  
  24.         this.score = score;  
  25.     }  
  26. }  
  27. public static void main(String[] args) {  
  28.         List<Students> students = new ArrayList<Students>();  
  29.         students.add(new Students(23, 100));  
  30.         students.add(new Students(27, 98));  
  31.         students.add(new Students(29, 99));  
  32.         students.add(new Students(29, 98));  
  33.         students.add(new Students(22, 89));  
  34.         Collections.sort(students, new Comparator<Students>() {  
  35.   
  36.             @Override  
  37.             public int compare(Students o1, Students o2) {  
  38.                 int i = o1.getScore() - o2.getScore();  
  39.                 if(i == 0){  
  40.                     return o1.getAge() - o2.getAge();  
  41.                 }  
  42.                 return i;  
  43.             }  
  44.         });  
  45.         for(Students stu : students){  
  46.             System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());  
  47.         }  
  48. }  
输出结果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

从上面的例子我们可以看出Students类没有实现Comparable<T>接口,只是在sort()方法
中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。

以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法。

离散数学期末考试试卷(两套)-熟悉题型 3.设集合A={a,b,c,d}上有自反关系R={,,,,},对称关系S={,,,}。6.设集合A={1,2,3},B={u,v,w},C={a,b,c},f是集合A到集合B上的映射,g是集合B到集合C上的映射,f={, , },g={},则复合函数g。5. 设集合A={a,b,c,d,e},下列选项中哪一个集合不是A的划分( )。 阅读详情

相关推荐

OCS2 移动机械臂深度解析:ocs2_mobile_manipulator 与 ocs2_mobile_manipulator_ros 源码全拆解

摘要:本文深入解析OCS2移动机械臂MPC控制框架的两个核心工具包。ocs2_mobile_manipulator负责算法建模,通过MobileManipulatorInterface统一构建最优控制问题,支持4种机械臂模型并实现自动维度推导;ocs2_mobile_manipulator_ros负责ROS集成,包含MPC求解、虚拟跟踪等4个核心节点。文章详细剖析了工具包分工、最优控制建模架构(含动力学、代价约束设计)、ROS运行管线、参数配置映射,并提供了高效的源码阅读顺序建议,帮助开发者快速掌握移动机械

m0_73309445的博客 653

实现集合List中的元素进行排序

Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: public static void main(String[] args) { List nums = new ArrayList(); nums.

小哥的专栏 27万+

如何优雅地进行频谱分析—— 一行代码实现绘制MATLAB频谱、功率谱图

之前的文章里讲了关于信号频谱、能量谱的相关理论和MATLAB编程实现方法: Mr.看海:信号频域分析方法的理解(频谱、能量谱、功率谱、倒频谱、小波分析) Mr.看海:频域特征值提取的MATLAB代码实现(频谱、功率谱、倒频谱) 不过对于刚刚开始进行这方面研究,或者对MATLAB不甚熟悉,抑或者不想花太多时间用在编程这件事上的同学,目前缺少一种足够便捷、高效、可靠的代码。 所以笔者想做这样一件事:编写一个函数,同学们只需要导入自己要分析的数据,并按照自己的需求设置部分选项,调用一行代码就可以实现绘制频

fengzhuqiaoqiu的博客 2万+

list排序的几种方法

List<Integer> list = new ArrayList<>(); list.add(3); list.add(5); list.add(1); Collections工具类,升序排: Collections.sort(list); System.out.println(list); Console: [1, 3, 5] Collecti...

hans的博客 6万+

如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤

如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤。

wyxtx的博客 5657

利用腾讯云轻量服务器快速搭建网站CDN

腾讯云的轻量最近在主机和站长中间可谓是占尽来风头,优秀的线路,低廉的价格使得越来越多的人开始使用腾讯云的轻量级服务器来部署应用。由于腾讯云轻量服务器的海外服务器电信走的是CN2GIA线路带宽30m挺适合做CDN的,我就记录一下如何利用腾讯云香港的轻量服务器搭建一个CDN。 购买服务器 首先选购服务器,最近腾讯云在做活动,力度很大国内备案用户可以选用国内的服务器最低128元/年,未备案的可以选用香港或者新加坡的服务器。 购买链接 服务器系统选Debian、Ubuntu、centos都可以 一键脚

demo_top的博客 2562

Java中List排序的3种方法

在某些特殊的场景下,我们需要在 Java 程序中对 List 集合进行排序操作。比如从第三方接口中获取所有用户的列表,但列表默认是以用户编号从小到大进行排序的,而我们的系统需要按照用户的年龄从大到小进行排序,这个时候,我们就需要对 List 集合进行自定义排序操作了。​ List 排序的常见方法有以下 3 种: 使用 Comparable 进行排序; 使用 Comparator 进行排序; 如果是 JDK 8 以上的环境,也可以使用 Stream 流进行排序。 下面我们分别来看各种排序方法的具体..

weixin_64314555的博客 7759

VisualStudio2022配置CGAL

vs2022和vs2017安装配置boost没什么区别,只需要注意boost的msvc得是14.3的,这玩意跟visualstudio版本挂钩的。压缩包解压,得到下面这两文件,然后把auxiliary这个文件挪到CGAL-5.6里面就行了。我用cgal读取一个stl模型,并输出相关信息(想可视化的话需要安装Qt,不想装Qt也可以装VTK)然后下载下面这两个压缩包。照着下面的截图填就完事了。

weixin_43850909的博客 1169

对List集合中的元素进行排序

来源:http://blog.youkuaiyun.com/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: [

cheng9981的博客 1343

学Simulink——基于Simulink的扰动观测器(DOB)补偿坡道重力分量

(质量5kg,坡度30°,目标速度1m/s)为例,基于Simulink搭建“DOB+PI”复合控制仿真平台,从系统建模、DOB算法推导、离散化实现到Simulink模块搭建,提供模块化模型、核心代码及参数整定表,帮助工程师彻底解决重力等恒值扰动引起的稳态误差问题。采用双线性变换(Tustin): s=Ts​2​z+1z−1​,其中 Ts​为控制周期。模块相加(注意符号:ufinal​=upi​−ucomp​或 upi​+ucomp​,取决于扰动定义方向,此处假设重力为正,控制力需反向抵消,故为减)。

MHD0815的博客 69

2、Minikube安装Ingress

文章目录前言一、Ingress安装二、Ingress Demo1.创建一个pod和service2.部署ingress3.添加minikube域名映射三、遇到的坑 前言 上篇介绍了Minikube的安装,本篇介绍一下如何在Minikube中安装Ingress。 一、Ingress安装 Ingress安装很简单,Minikube里面带了Ingress附件。 安装Ingress minikube addons enable ingress 禁用Ingress minikube addons disa

star_apple的博客 3069

java 数组去重排序_Java实现的数组去重与排序操作详解

本文实例讲述了Java实现的数组去重与排序操作。分享给大家供大家参考,具体如下:这里演示Java实现数组去重、排序操作文中的示例源码编写基于Jdk1.6+、junit4.8.2java.util.Arrays.sort()支持对int[],long[],short[],char[],byte[],float[],double[],Object[]进行排序参考示例代码片段如下// 声明int 数组,...

weixin_32479557的博客 1607

Wi-Fi物理帧间隔概念简介

物理帧间隔概念简介。

1042484520@qq.com(邮箱) 1778

列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()

集合、数组排序总结

m0_73249076的博客 1613

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LeetCode——解决删除数组中重复元素问题三种方式

情景要求: (1)输入的数组元素为基本类型int。 (2)返回不含重复元素的数组,其类型为基本类型int。 (3)对最后的结果数组元素顺序没有要求,可乱序也可排序。 经过一系列的思考与实践,总结出了以下三种不同情形“删除数组重复元素”的解决办法。 1、通过原始数组删除重复元素 方法一:不重新开辟内存(不创建list、set等),可以在原始数组中原地删除重复元素。 由于数组的长...

J.Jian博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java List 排序问题

鄙人大概想了三种方式: 1.第一种:借助工具类 C

吴先生的专栏 893

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

单列集合的三种遍历方法,及list的特有遍历方法,和list的两种排序

Collection遍历 ①把集合转换为数组,对数组进行遍历 Object[] toArray(); ②获取集合的迭代器 Itreator 该接口是集合的迭代器接口类,定义了常见的迭代方法 1:boolean hasNext() 判断集合中是否有元素,如果有元素可以迭代,就返回true。 2: E next() 返回迭代的下一个元素,注意: 如果没有下一个元...

ღ 794

随机产生10个数,添加到List中去,然后倒序(由大到小)输出

1.先将数字添加到数组中,通过排序,再装入到list中去。 代码: @Test public void RandomSort1(){ int [] a = new int[10]; for (int i = 0; i &lt;10 ; i++) { int temp = (int) (Math.random()*100); a[i] =temp; ...

qq_35474535的博客 2336

两个数组合并排序

class Program { static void Main(string[] args) { int[] num1 = new int[] { 3, 5, 6, 7 }; int[] num2 = new int[] { 1, 3, 7, 8 }; int[...

weixin_30713953的博客 396

java去重_Java实现数组去除重复数据的方法详解

本文实例讲述了Java实现数组去除重复数据的方法。分享给大家供大家参考,具体如下:前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现,有好多方法可以实现,现在就总结一下,比较简单的几种。一.用List集合实现int[] str = {5, 6, 6, 6, 8, 8, 7,4};List list = new ArrayList();...

weixin_34896969的博客 1497

两个有序数组合并为一个有序数组

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34357962的博客 314

JAVA数组去除重复数据

如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现,有好多方法可以实现,现在就总结一下,比较简单的几种。 一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for ...

xm_QUQ的博客 608

【数论】C018_按奇偶排序数组 I(双 list 存储 | 双端队列模拟 | 双指针)

一、题目描述 Given an array A of non-negative integers, return an array consisting of all the even elements of A, followed by all the odd elements of A. You may return any answer array that satisfies this...

无敌兔0x01 517

java 实现数组去重复

1.当list调用contains()方法并传递一个元素时,会执行遍历,逐个对比item是否等于该元素,当遍历结束后,如果还没有一个元素等于该元素的值,则返回false, 否则返回true int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); ...

野的博客 3656

判断是否在数组中_如何检查 Java 数组中是否包含某个值?

作者 | 沉默王二本文经授权转载自沉默王二(ID:cmower)在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入地研究一下。另外,我想要告诉大家的是,作为程序员,我们千万不要轻视这些基础的知识点。因为基础的知识点是各种上层技术共同的基础,只有彻底地掌握了这些基础知识点,才能更好地理解程序...

weixin_29957793的博客 1045
上一篇: java使用jxl导出excel使用总结
下一篇: JDBC重点
Hellojava001
博客等级 码龄9年 0粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值