java中List的排序功能的实现

来源:互联网 发布:南阳理工软件 知乎 编辑:程序博客网 时间:2024/04/29 08:59
今天在工作的时候,遇到了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,则返回正数 

Java代码  收藏代码
  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.  */  
0 0
原创粉丝点击