今天在工作的时候,遇到了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 */