永发信息网

如何对 List 排序

答案:1  悬赏:0  手机版
解决时间 2021-03-28 00:43
如何对 List 排序
最佳答案
Collections对List集合中的数据进行排序

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

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

先看一个简单的例子:

public static void main(String[] args) {
List nums = new ArrayList();
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{

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 users = new ArrayList();
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)方法中List中的T必须实现Comparable接口,然后实现
compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;为什么
在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现
了Comparable接口,Java已经给我们做好了。

Collections提供的第二种排序方法sort(List list, Comparator 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 = new ArrayList();
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() {

@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接口,只是在sort()方法
中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。

以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北京到南宁的t5的车票是否好买?急
拉丝钢板和镜面不锈钢板的区别
吉安 滨江首府如何
calculater和calculator的区别
里石亭地址在哪,我要去那里办事
怎可以组什么成语
请问ff10(最终幻想10)里打Seymour怎么打?
江宁西站到合肥车次
[1一(1/2十1/3)]x36这题怎么简便算
北奔重卡V3前钢板第一片长度是多少
养森瘦瘦塑身包一盒减多少斤,一天需要用几次
什么是即期现货交易?
为什么这么多人分不清湖南卫视和芒果娱乐,芒
四川省广元市苍溪县公安局出入境管理处的具体
香菇竹荪木耳干贝虾能一起吃吗
推荐资讯
好心肠歹心肠,初一十五不洗衣裳啥意思
6.5×1.4+8.64÷2.7简便运算
聚乙烯塑料袋厚度几丝
全民k歌怎么看谁听了我的歌,步骤.百度知道
寻求替农民工说话的媒体
学校早晨8:20开始上课,小华家离学校900米,小
昆明神州专车收入怎样,好干吗
写真机打印的时候经常就自动停了
这双乔1的黑色蛇纹鞋叫什么名字
世界上最高峻雄伟的山脉是A.喜马拉雅山脉B.阿
我看完韩剧2015学校很精彩,下一有什么好看
where may mrs.green be
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?