今天在工作的时候,遇到了List排序的问题,所以总结了一下,与大家分享.Collections.sort排序的时候,用到了Comparator接口下面的compare()方法.下面的小例子中,还用到了匿名类技术和泛型,若朋友们看不懂,可以留言提问^-^
compare(Object 对象1,Object 对象2)重写时
1) 若返回负数,则表示 对象1<对象2
2) 若返回0,则表示 对象1=对象2
3) 若返回正数,则表示 对象1>对象2
反过来,在String类中,他有个CompareTo()方法,他的比较结果也是如此
字符串1.CompareTo(字符串2)比较结果
1) 若字符串1<字符串2,则返回负数
2) 若字符串1=字符串2,则返回0
3) 若字符串1>字符串2,则返回正数
1 //SortList.java
2 import java.util.ArrayList;
3 import java.util.Collections;
4 import java.util.Comparator;
5 import java.util.Iterator;
6 import java.util.List;
7
8 public class SortList {
9 public static void main(String[] args) {
10 // 方法 一 Test
11 // 测试数据
12 Test t1 = new Test(88, "phl");
13 Test t2 = new Test(6, "aaa");
14 Test t3 = new Test(3, "abc");
15 Test t4 = new Test(5, "aac");
16 Test t5 = new Test(4, "adc");
17 Test t6 = new Test(4, "aac");
18 Test t7 = new Test(4, "aaa");
19
20 List<Test> ts = new ArrayList<Test>();
21 ts.add(t1);
22 ts.add(t2);
23 ts.add(t3);
24 ts.add(t4);
25 ts.add(t5);
26 ts.add(t6);
27 ts.add(t7);
28 // 排序,通过泛型和匿名类来实现
29 Collections.sort(ts, new Comparator<Test>() {
30
31 public int compare(Test o1, Test o2) {
32 int result = o1.getId() - o2.getId();
33 if (result == 0) {
34 result = o1.getName().compareTo(o2.getName());
35 }
36 return result;
37 }
38 });
39 // 打印排序结果
40 Iterator<Test> iterator = ts.iterator();
41 while (iterator.hasNext()) {
42 Test test = iterator.next();
43 System.out.println("id=" + test.getId() + ";name=" + test.getName());
44 }
45
46 System.out.println("*******************************************");
47 // 方法 二 Test2
48 // 测试数据
49 //Comparable<Test2>[] ts2 = new Test2[5];
50 Test2[] ts2 = new Test2[5];
51 ts2[0] = new Test2(11, "phl");
52 ts2[1] = new Test2(16, "aaa");
53 ts2[2] = new Test2(21, "adc");
54 ts2[3] = new Test2(14, "acd");
55 ts2[4] = new Test2(6, "ada");
56 java.util.Arrays.sort(ts2);
57
58 // 打印排序结果
59 for (int i = 0; i < ts2.length; i++) {
60 System.out.println("id=" + ts2[i].getId() + ";name=" + ts2[i].getName());
61 }
62 }
63 }
64
65 // 测试类
66 class Test {
67 private int id;
68 private String name;
69
70 public Test(int id, String name) {
71 this.id = id;
72 this.name = name;
73 }
74
75 public int getId() {
76 return id;
77 }
78
79 public void setId(int id) {
80 this.id = id;
81 }
82
83 public String getName() {
84 return name;
85 }
86
87 public void setName(String name) {
88 this.name = name;
89 }
90 }
91
92 // 测试类
93 class Test2 implements java.lang.Comparable<Test2> {
94 private int id;
95 private String name;
96
97 public Test2(int id, String name) {
98 this.id = id;
99 this.name = name;
100 }
101
102 // 实现接口比较方法
103 public int compareTo(Test2 t) {
104 return this.id - t.getId();
105 }
106
107 public int getId() {
108 return id;
109 }
110
111 public void setId(int id) {
112 this.id = id;
113 }
114
115 public String getName() {
116 return name;
117 }
118
119 public void setName(String name) {
120 this.name = name;
121 }
122 }
123
124 /*
125 输出结果如下
126 id=3;name=abc
127 id=4;name=aaa
128 id=4;name=aac
129 id=4;name=adc
130 id=5;name=aac
131 id=6;name=aaa
132 id=88;name=phl
133 *******************************************
134 id=6;name=ada
135 id=11;name=phl
136 id=14;name=acd
137 id=16;name=aaa
138 id=21;name=adc
139 */