对list进行排序

List里面是名字: firstname , lastname. 

名字首字母相同,再去比第二个!以此类推。。。

问题补充:
net.mail.public 写道
[size=large][color=red]要对List排序,你要对List里装的这种类型的类实现排序接口(Comparable). 
举个例子: 

下面这个例子是对List<MyObject>进行排序.使用Collections.sort(List list);方法,此方法会调用MyObject的compareTo方法.所以在MyObject类定义里要实现compareTo方法. 
Java代码   收藏代码
  1. public class ListSort {  
  2.   
  3.     /** 
  4.      * main() 
  5.      * 2010-4-2,下午09:25:57 
  6.      */  
  7.     public static void main(String[] args) {  
  8.         // TODO Auto-generated method stub  
  9.         List<MyObject> lists = new ArrayList<MyObject>();  
  10.         MyObject obj1 = new MyObject("d");  
  11.         MyObject obj2 = new MyObject("a");  
  12.         lists.add(obj1);  
  13.         lists.add(obj2);  
  14.         Collections.sort(lists);  
  15.         for (MyObject myObject : lists) {  
  16.             System.out.println(myObject.getContent());  
  17.         }  
  18.     }  
  19.   
  20. }  
  21. class MyObject implements Comparable<MyObject>{  
  22.     private String content;  
  23.     public MyObject(String _content) {  
  24.         this.content = _content;  
  25.     }  
  26.       
  27.     public String getContent() {  
  28.         return content;  
  29.     }  
  30.   
  31.     public void setContent(String content) {  
  32.         this.content = content;  
  33.     }  
  34.   
  35.     public int compareTo(MyObject obj) {  
  36.         // TODO Auto-generated method stub  
  37.         if (null == obj) return 1;  
  38.         else {  
  39.             return this.content.compareTo(obj.content);  
  40.         }  
  41.           
  42.     }  
  43.       
  44.       
  45. }  


下面是Collections.sort方法 
Java代码   收藏代码
  1. public static <T extends Comparable<? super T>> void sort(List<T> list) {  
  2.     Object[] a = list.toArray();  
  3.     Arrays.sort(a);  
  4.     ListIterator<T> i = list.listIterator();  
  5.     for (int j=0; j<a.length; j++) {  
  6.         i.next();  
  7.         i.set((T)a[j]);  
  8.     }  
  9.     }  


实际上我们的MyObject类的方法compareTo是在Arrays.sort()中被调用的... 
请看.. 
Java代码   收藏代码
  1. public static void sort(Object[] a) {  
  2.         Object[] aux = (Object[])a.clone();  
  3.         mergeSort(aux, a, 0, a.length, 0);  
  4.     }  

Java代码   收藏代码
  1.    private static void mergeSort(Object[] src,  
  2.               Object[] dest,  
  3.               int low,  
  4.               int high,  
  5.               int off) {  
  6. int length = high - low;  
  7.   
  8. // Insertion sort on smallest arrays  
  9.        if (length < INSERTIONSORT_THRESHOLD) {  
  10.            for (int i=low; i<high; i++)  
  11.                for (int j=i; j>low &&  
  12.          ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)  
  13.                    swap(dest, j, j-1);  
  14.            return;  
  15.        }  
  16.   
  17.        // Recursively sort halves of dest into src  
  18.        int destLow  = low;  
  19.        int destHigh = high;  
  20.        low  += off;  
  21.        high += off;  
  22.        int mid = (low + high) >> 1;  
  23.        mergeSort(dest, src, low, mid, -off);  
  24.        mergeSort(dest, src, mid, high, -off);  
  25.   
  26.        // If list is already sorted, just copy from src to dest.  This is an  
  27.        // optimization that results in faster sorts for nearly ordered lists.  
  28.        if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {  
  29.            System.arraycopy(src, low, dest, destLow, length);  
  30.            return;  
  31.        }  
  32.   
  33.        // Merge sorted halves (now in src) into dest  
  34.        for(int i = destLow, p = low, q = mid; i < destHigh; i++) {  
  35.            if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)  
  36.                dest[i] = src[p++];  
  37.            else  
  38.                dest[i] = src[q++];  
  39.        }  
  40.    }  
[/color][/size] 


当然,这是一种实现排序的办法.还有一种是实现Comparator,实现这个接口,然后使用 
Collections.sort(List list,Comparator c);这个方法来排序.. 

原理差不多.. 


希望对你有帮助..




List里面是名字: firstname , lastname. 

名字首字母相同,再去比第二个!以此类推。。。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值