實例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
package
com.huad.luck;
import
java.util.ArrayList;
import
java.util.Collections;
import
java.util.Comparator;
import
java.util.List;
public
class
Test {
public
static
void
main(String[] args) {
Person p =
new
Person();
p.setName(
"tom"
);
p.setAge(
11
);
Person p1 =
new
Person();
p1.setName(
"lilei"
);
p1.setAge(
19
);
Person p2 =
new
Person();
p2.setName(
"json"
);
p2.setAge(
15
);
List<Person> list =
new
ArrayList<Person>();
list.add(p);
list.add(p1);
list.add(p2);
Collections.sort(list,
new
Comparator<Person>() {
//這里可以再Person中實現 Comparator<T>接口,重寫compare方法
@Override
public
int
compare(Person o1, Person o2) {
//這里按照名字排序
return
o1.getName().compareTo(o2.getName());
//這里按照age排序
//return (o1.getAge()+"").compareTo(o2.getAge()+"");
//。。。根據不同屬性值排序
}
});
for
(
int
i =
0
; i < list.size(); i++) {
System.out.println(list.get(i).getName());
}
}
}
//Person類
package
com.huad.luck;
public
class
Person{
private
String name ;
private
int
age;
public
Person(String name ,
int
age) {
this
.name = name;
this
.age = age;
}
public
Person( ) {
}
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;
}
}
<p style=
"padding-top: 0px; padding-bottom: 0px; margin-top: 8px; margin-bottom: 8px; line-height: 22.5px; letter-spacing: 0.5px; font-size: 12.5px; word-wrap: break-word; word-break: break-all; color: rgb(51, 51, 51); font-family: 'Microsoft YaHei', Verdana, sans-serif, 宋體;"
><span style=
"padding: 0px; margin: 0px; letter-spacing: normal; font-stretch: normal; font-size: 14px; line-height: 24px; font-family: Tahoma; color: rgb(0, 0, 0);"
>用collection.sort()方法對list集合排序</span><br style=
"padding: 0px; margin: 0px;"
/></p><p style=
"padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;"
><span style=
"padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;"
><span style=
"padding: 0px; margin: 0px; list-style: none outside none; line-height: 21px; word-wrap: break-word; word-break: normal;"
></span></span></p><p style=
"padding-top: 0px; padding-bottom: 0px; margin-top: 1em; margin-bottom: 0.5em; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;"
>第一種是list中的對象實現Comparable接口,如下:<span style=
"padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;"
> </span></p><pre
class
=
"java"
style=
"padding: 5px; margin-top: 0px; margin-bottom: 0px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border: 1px solid rgb(221, 221, 221); color: rgb(51, 51, 51); background: rgb(246, 246, 246);"
>
/**
* 根據order對User排序
*/
public
class
User
implements
Comparable<User>{
private
String name;
private
Integer order;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
Integer getOrder() {
return
order;
}
public
void
setOrder(Integer order) {
this
.order = order;
}
public
int
compareTo(User arg0) {
return
this
.getOrder().compareTo(arg0.getOrder());
}
}
|
測試一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
class
Test{
public
static
void
main(String[] args) {
User user1 =
new
User();
user1.setName(
"a"
);
user1.setOrder(
1
);
User user2 =
new
User();
user2.setName(
"b"
);
user2.setOrder(
2
);
List<User> list =
new
ArrayList<User>();
//此處add user2再add user1
list.add(user2);
list.add(user1);
Collections.sort(list);
for
(User u : list){
System.out.println(u.getName());
}
}
}
|
輸出結果如下
a
b
第二種方法是根據Collections.sort重載方法來實現,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/**
* 根據order對User排序
*/
public
class
User {
//此處無需實現Comparable接口
private
String name;
private
Integer order;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
Integer getOrder() {
return
order;
}
public
void
setOrder(Integer order) {
this
.order = order;
}
}
|
主類中這樣寫即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public
class
Test{
public
static
void
main(String[] args) {
User user1 =
new
User();
user1.setName(
"a"
);
user1.setOrder(
1
);
User user2 =
new
User();
user2.setName(
"b"
);
user2.setOrder(
2
);
List<User> list =
new
ArrayList<User>();
list.add(user2);
list.add(user1);
Collections.sort(list,
new
Comparator<User>(){
public
int
compare(User arg0, User arg1) {
return
arg0.getOrder().compareTo(arg1.getOrder());
}
});
for
(User u : list){
System.out.println(u.getName());
}
}
}
|
輸出結果如下
a
b
前者代碼結構簡單,但是只能根據固定的屬性排序,后者靈活,可以臨時指定排序項,但是代碼不夠簡潔
多字段的場合:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
Collections.sort(list,
new
Comparator<User>(){
public
int
compare(User arg0, User arg1) {
// 第一次比較專業
int
i = arg0.getOrder().compareTo(arg1.getOrder());
// 如果專業相同則進行第二次比較
if
(i==
0
){
// 第二次比較
int
j=arg0.getXXX().compareTo(arg1.getXXX());
// 如果學制相同則返回按年齡排序
if
(j==
0
){
return
arg0.getCCC().compareTo(arg1.getCCC());
}
return
j;
}
return
i;
}
});
|
以下是另外一個例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
package
test;
import
java.util.ArrayList;
import
java.util.Collections;
import
java.util.Comparator;
public
class
ArrayListTest {
public
static
void
main(String[] args) {
ArrayList<Exmployee> arrayList =
new
ArrayList<Exmployee>() ;
arrayList.add(
new
Exmployee(
"zengqiang"
,
new
Integer(
5000
))) ;
arrayList.add(
new
Exmployee(
"zengmin"
,
new
Integer(
4000
))) ;
arrayList.add(
new
Exmployee(
"liuxiaojuan"
,
new
Integer(
4200
))) ;
arrayList.add(
new
Exmployee(
"giuming"
,
new
Integer(
2200
))) ;
Collections.sort(arrayList,
new
Comparator<Exmployee>(){
public
int
compare(Exmployee arg0, Exmployee arg1) {
return
arg1.getSalary()-arg0.getSalary() ;
//按照工資升序
//return arg0.getSalary()-arg1.getSalary() ; 按照工資降序
//return arg0.getName().compareTo(arg1.getName()) ; 按照姓名升序
}
});
for
(Exmployee e:arrayList)
System.out.println(e.getName()+
"'s salary is "
+e.getSalary()) ;
}
}
class
Exmployee {
public
Exmployee(String name,
int
salary) {
this
.name = name ;
this
.salary = salary ;
}
private
String name;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
int
getSalary() {
return
salary;
}
public
void
setSalary(
int
salary) {
this
.salary = salary;
}
private
int
salary;
}
|
以上這篇List集合對象中按照不同屬性大小排序的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。