更新時(shí)間:2019-08-30 10:36:49 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2761次
最近有小伙伴們問小編List集合可以排序嗎?今天動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編專門針對(duì)此問題對(duì)大家介紹,List集合是可以排序的,List集合排序有兩種方法,下面就隨小編一起看看List集合排序的兩種方法是什么呢?
首先講一下Comparable接口和Comparator接口,以及他們之間的差異。有助于Collections.sort()方法的使用。
1、Comparable自然規(guī)則排序
//在自定義類Student里面實(shí)現(xiàn)Comparable接口,并重寫抽象方法compareTo(Student o);
//Collections.sort(集合);
先看一個(gè)簡(jiǎn)單的例子:
public static void main(String[] args) {
List
nums.add(3);
nums.add(5);
nums.add(1);
nums.add(0);
System.out.println(nums);
Collections.sort(nums);
System.out.println(nums);
輸出結(jié)果:
[3, 5, 1, 0]
[0, 1, 3, 5]
稍微復(fù)雜的List里面放一個(gè)復(fù)雜的對(duì)象
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();//如果年齡相等了再用分?jǐn)?shù)進(jìn)行排序
}
return i;
}
}
public static void main(String[] args) {
List
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());
}
}
輸出結(jié)果:
55,23
67,23
78,26
34,56
我們會(huì)發(fā)現(xiàn)sort(List
2、Comparator專門規(guī)則排序(l臨時(shí)排序)
//新建一個(gè)實(shí)現(xiàn)了Comparator接口的類,并重寫抽象方法compare(Student o1, Student o2);
//Collections.sort(集合,實(shí)現(xiàn)了Comparator接口的類的實(shí)例化對(duì)象);
Collections提供的第二種排序方法sort(List
先看例子:
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.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());
}
}
輸出結(jié)果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23
從上面的例子我們可以看出Students類沒有實(shí)現(xiàn)Comparable
相關(guān)免費(fèi)視頻教程推薦
List集合可以排序視頻教程下載:http://www.dabaquan.cn/xiazai/2486.html
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743