国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java中對(duì)list元素進(jìn)行排序的方法詳解

2019-11-26 14:59:41
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在Java Collection Framework中定義的List實(shí)現(xiàn)有Vector,ArrayList和LinkedList。這些集合提供了對(duì)對(duì)象組的索引訪問(wèn)。他們提供了元素的添加與刪除支持。然而,它們并沒(méi)有內(nèi)置的元素排序支持。
  你能夠使用java.util.Collections類中的sort()方法對(duì)List元素進(jìn)行排序。你既可以給方法傳遞一個(gè)List對(duì)象,也可以傳遞一個(gè)List和一個(gè)Comparator。如果列表中的元素全都是相同類型的類,并且這個(gè)類實(shí)現(xiàn)了Comparable接口,你可以簡(jiǎn)單的調(diào)用Collections.sort()。如果這個(gè)類沒(méi)有實(shí)現(xiàn)Comparator,你也可以傳遞一個(gè)Comparator到方法sort()中,進(jìn)行排序。如果你不想使用缺省的分類順序進(jìn)行排序,你同樣可以傳遞一個(gè)Comparator到方法sort()中來(lái)進(jìn)行排序。

1.比較的對(duì)象實(shí)現(xiàn)Comparable接口

public class Student implements Comparable {  private int id;  private int age;  private String name;  public Student(int id){   this.id=id;  }  public int getId() {   return id;  }   public void setId(int id) {   this.id = id;  }   public int getAge() {   return age;  }   public void setAge(int age) {   this.age = age;  }   public String getName() {   return name;  }   public void setName(String name) {   this.name = name;  }       public static void main(String args[]){   List<Student> list=new ArrayList<Student>();   for(int i=1000;i>0;i--){    list.add(new Student(i));   }      Collections.sort(list);   for(Student s: list){    System.out.println(s.getId());   }  }   public int compareTo(Object o) {   if(o instanceof Student){    Student s=(Student)o;    if(this.id>s.id){     return 1;    }    else{     return 0;    }   }   return -1;  }  } 

2.利用Collections.sort(Object o,Comparator c)

public class JiaMenuComparator implements Comparator{   public int compare(Object o1, Object o2) {   if(null!=o1&&null!=o2)   {    JiaMenu menu1=(JiaMenu)o1;    JiaMenu menu2=(JiaMenu)o2;    if(menu1.getId()<menu2.getId()){     return 1;    }else {     return 0;    }   }   return 0;  }   } 

3.對(duì) List 元素中的多個(gè)屬性進(jìn)行排序(用到 commons-beanutils)
commons-beanutils 類庫(kù)中有一個(gè) BeanComparator 類,可以用來(lái)給 JavaBean 排序。但是這個(gè)類一次只能對(duì)一個(gè)屬性排序。下面是一個(gè)利用 BeanComparator 實(shí)現(xiàn)對(duì) JavaBean 的多個(gè)屬性進(jìn)行排序的例子,非常簡(jiǎn)單:

import org.apache.commons.beanutils.BeanComparator;import java.util.Collections;import java.util.Comparator;import java.util.List; /** * 對(duì) List 元素的多個(gè)屬性進(jìn)行排序的類 */@SuppressWarnings({"unchecked"})public class ListSorter {  /**  * List 元素的多個(gè)屬性進(jìn)行排序。例如 ListSorter.sort(list, "name", "age"),則先按  * name 屬性排序,name 相同的元素按 age 屬性排序。  *  * @param list  包含要排序元素的 List  * @param properties 要排序的屬性。前面的值優(yōu)先級(jí)高。  */ public static <V> void sort(List<V> list, final String... properties) {  Collections.sort(list, new Comparator<V>() {   public int compare(V o1, V o2) {    if (o1 == null && o2 == null) return 0;    if (o1 == null) return -1;    if (o2 == null) return 1;     for (String property : properties) {     Comparator c = new BeanComparator(property);     int result = c.compare(o1, o2);     if (result != 0) {      return result;     }    }    return 0;   }  }); }}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 饶河县| 霍山县| 象山县| 阳春市| 西城区| 甘泉县| 安宁市| 利辛县| 光山县| 奎屯市| 虹口区| 凯里市| 江口县| 彭泽县| 濮阳县| 德化县| 饶平县| 南丰县| 石棉县| 尉氏县| 林甸县| 济阳县| 普宁市| 台北县| 蒙城县| 河南省| 吐鲁番市| 彝良县| 商丘市| 攀枝花市| 曲阳县| 沙河市| 方山县| 招远市| 阳高县| 澎湖县| 凤阳县| 砚山县| 沙坪坝区| 三江| 卓资县|