问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何对 List 排序

发布网友 发布时间:2022-05-10 15:31

我来回答

2个回答

懂视网 时间:2022-04-22 14:37

本篇文章小编将和大家谈谈List的排序方法,感兴趣的朋友可以来了解一下,希望能对你有所帮助。

可用使用Collections.sort(List<T> list)和Collections.sort(List<T> list, Comparator<? super T> c)两个排序方法,实际上这种方法排序都需要比较器。

前一个方法是根据内部比较器排序,即List中的元素必须实现Comparable接口,此接口有个compareTo方法用来比较两个对象的某个属性值。

后一个方法是根据Comparator接口实现类的外部比较器进行排序,Comparator接口有个compare方法用于比较两个对象的某个属性值。

比较结果都是返回int类型,只有3个值,分别是“-1”按升序排、“0”不动、“1”按降序排

Java8后List对象本身有sort()方法进行排序,实际上也是使用上述实现原理,不过它使用java8的拉姆达表达式lambda,代码写起来更简洁。

相关教程:java视频教程

热心网友 时间:2022-04-22 11:45

Collections对List集合中的数据进行排序

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

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

先看一个简单的例子:

public static void main(String[] args) {
List<Integer> nums = new ArrayList<Integer>();
nums.add(3);
nums.add(5);
nums.add(1);
nums.add(0);
System.out.println(nums);
Collections.sort(nums);
System.out.println(nums);
}
输出结果:
[3, 5, 1, 0]
[0, 1, 3, 5]
稍微复杂的List里面放一个复杂的对象

package core.java.collection.collections;

public class User implements Comparable<User>{

private int score;

private int age;

public User(int score, int age){
super();
this.score = score;
this.age = age;
}

public int getScore() {
return score;
}

public void setScore(int score) {
this.score = score;
}

public int getAge() {
return age;
}

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

@Override
public int compareTo(User o) {
int i = this.getAge() - o.getAge();//先按照年龄排序
if(i == 0){
return this.score - o.getScore();//如果年龄相等了再用分数进行排序
}
return i;
}

}

public static void main(String[] args) {
List<User> users = new ArrayList<User>();
users.add(new User(78, 26));
users.add(new User(67, 23));
users.add(new User(34, 56));
users.add(new User(55, 23));
Collections.sort(users);
for(User user : users){
System.out.println(user.getScore() + "," + user.getAge());
}
}
输出结果:
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)
先看例子:

package core.java.collection.collections;

public class Students {

private int age;
private int score;

public Students(int age, int score){
super();
this.age = age;
this.score = score;
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
public static void main(String[] args) {
List<Students> students = new ArrayList<Students>();
students.add(new Students(23, 100));
students.add(new Students(27, 98));
students.add(new Students(29, 99));
students.add(new Students(29, 98));
students.add(new Students(22, 89));
Collections.sort(students, new Comparator<Students>() {

@Override
public int compare(Students o1, Students o2) {
int i = o1.getScore() - o2.getScore();
if(i == 0){
return o1.getAge() - o2.getAge();
}
return i;
}
});
for(Students stu : students){
System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
}
}
输出结果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

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

以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大同四区和市区的区别 大同云冈属于哪里 大同市云冈区建成区范围都有哪些 it wasn't long before i found a job.---before是什么意思 It wasn't long before a man from It wasn't long before和It won't be long before有什么区别吗? it wasn't long before和it won't be long before有什么不同?_百度知 ... 微信怎么查和一个好友的红包记录 马龙巴黎奥运会夺冠了吗 明天是中国的情人节??? 借贷如何借贷 骑着驴骡子思骏马 官居宰相望王侯 python 怎么给element为tuple的dictionary排序 驴子和骡子驮着货物关排在路上走着,驴子不停地埋怨主人给它驮的货物太多,压得实在受不 梦见老家邻居的姑娘给我做女朋友 梦见邻居家姑娘背后流血了我给她捂住了是什么意思? m梦见邻居家20岁的姑娘 个人商业贷款与购房贷款哪个利率低? 我刚刚全款买了一套房大概63万总额,现在想做抵押贷款,大概贷30万,不想找民间。又没有什么好的银行套餐 福建省南平市建阳市什么样的房子能够在银行抵押贷款 福建房子抵押贷款利息多少,比如贷20万3年还清,还款方式是怎么还 福建三明市13万的房子住房抵押贷款能贷多少钱? 房子抵押贷款有哪些流程 ,贷款额度、期限、利率、还款等事宜。 手机最后1%的电量到底能用多久? 武汉一代社保金额转到第三代怎么弄? 跨行换领第三代社保卡,养老金会自动领取吗 北京市第一代社保卡能够更换为第三代社保卡 我用第一代社保卡申请了失业补助金,换了第三代社保卡要重新申请吗?_百度问一问 失业后把一代社保卡换成换成三代社保卡,会不会影响下次就业公司缴纳社保? 第一代社保卡可以直接换第三代吗 能否帮我找几种简单易画的手抄报的边框?急 小楼又东风宋轶大长腿诱惑是哪一集 如何对List集合中的对象进行排序? 一个数组的list集合如何按照数组中的两个元素排序 我喜欢个子高点的女生身材苗条的 因为那种女生的大长腿好*,你们不喜欢么? 水务局上班好还是在水利公司上班好啊?请大家说说哦 求写一个list排序的方法 玉女掌门人回娘家,十年前凭《回家的*》爆红,如今大长腿诱人,她是谁? 集合list排序 【java】集合List里面的元素排列 第三方手机管家是什么 第三方手机管家,哪一个和华为手机管家兼容性好一些 第三方手机管家会影响手机系统性能吗? 腾讯手机管家和i管家会不会冲突 市面上卖的馒头是用什么来发酵的 至今为止,你都吃过哪些十分下饭的菜? 电脑如果一直保持充电状态且边充边玩会不会影响电池寿命。 你吃过哪些很下饭的菜? 系统备份做好了怎么用? 电脑程序怎样备份,备份后要怎么使用?