第一种方法,就是list中对象实现Comparable接口,代码如下:
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
|
public class Person implements Comparable
private String name;
private Integer order;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this .name = name;
}
/**
* @return the order
*/
public Integer getOrder() {
return order;
}
/**
* @param order
* the order to set
*/
public void setOrder(Integer order) {
this .order = order;
}
@Override
public int compareTo(Person 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
19
20
21
|
public static void main(String[] args) {
List new ArrayList
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
p1.setName( "name1" );
p1.setOrder( 1 );
p2.setName( "name2" );
p2.setOrder( 2 );
p3.setName( "name3" );
p3.setOrder( 3 );
listA.add(p2);
listA.add(p1);
listA.add(p3);
Collections.sort(listA);
for (Person p : listA) {
System.out.println(p.getName());
}
}
|
第二种方法,就是在重载Collections.sort方法,代码如下:
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
|
public class Person {
private String name;
private Integer order;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this .name = name;
}
/**
* @return the order
*/
public Integer getOrder() {
return order;
}
/**
* @param order
* the order to set
*/
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
23
24
25
26
27
|
public static void main(String[] args) {
List new ArrayList
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
p1.setName( "name1" );
p1.setOrder( 1 );
p2.setName( "name2" );
p2.setOrder( 2 );
p3.setName( "name3" );
p3.setOrder( 3 );
listA.add(p2);
listA.add(p1);
listA.add(p3);
Collections.sort(listA, new Comparator
public int compare(Person arg0, Person arg1) {
return arg0.getOrder().compareTo(arg1.getOrder());
}
});
for (Person p : listA) {
System.out.println(p.getName());
}
}
|
两次执行的结果都是:
name1
name2
name3
对于Comparator和Compartor:
使用Compartor接口实现排序:实现其compare()方法,根据第一个参数小于、等于或大于第二个参数分别返回负整数、零
或正整数来判断大小。强行对某个对象 collection进行整体排序的比较函数。可以将Comparator传递给sort方法(如 Collections.sort
huo Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Compartor来控制某些数据结构(如 有序set或有序映射)的顺序,
或者为那些没有自然顺的对象collection提供排序。
使用Comparable接口完成排序: 实现此接口的对象列表(和数组)可以通过Collecitons.sort(和Array.sory)进行自动排序。实现此接口
的对象可以用作有序映射中的键或有序集合中的元素,无序指定比较器。
二者的区别:
1:Comparable是在集合内部定义的方法实现的排序,Compartor实在集合歪脖实现的排序
2: 一个类实现了Comparable接口则表明这个类的对象之间是可以互相比较的,这个类对象组成的集合就可以直接使用sort方法排序。一般
我们写的bean都要实现这一接口,这也是标准javabean的规范。
3:Comparator可以看成一种算法的实现,讲算法和数据分离,Compartor也可以在下面两种环境汇总使用:
1) 类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2)可以使用多种排序标准,比如升序、降序等。