(轉載)java list排序

來源:互聯網
上載者:User

標籤:擴充   san   nbsp   ide   public   並且   測試   比較   tostring   

1、簡介                                

這個和數組的排序又不一樣了。

其實Java針對數組和List的排序都有實現,對數組而言,你可以直接使用Arrays.sort對於List和Vector而言,你可以使用Collections.sort方法

Java API針對集合類型的排序提供了2個方法:

java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.util.List, java.util.Comparator)

如果集合裡面的元素都是相同類型的,並且實現了Comparable介面,那麼可以直接調用第一個方法。

如果你有其它的排序的想法,比如你不想按照自然排序進行,還可以傳一個Comparator過去,比如反向。

元素不相同的情況比較複雜,可以暫時不用考慮。

 

2、通過實現Comparable介面來實現list的排序    

假如現在我們有一個Person類的list集合,要讓其按照一個Order屬性進行排序,我們可以讓Person類實現Comparable介面,重寫其CompareTo方法即可。具體實現如下:

1)、Person實體類

public class Person implements Comparable<Person> {    private String name;    private Integer order;     /**     * @return the name     */    public String getName() {        return name;    }     /**     * @param name     *            the name to set     */    public void setName(String name) {        this.name = name;    }     /**     * @return the order     */    public Integer getOrder() {        return order;    }     /**     * @param order     *            the order to set     */    public void setOrder(Integer order) {        this.order = order;    }     @Override    public int compareTo(Person arg0) {        return this.getOrder().compareTo(arg0.getOrder());      //這裡定義你排序的規則。    } }

通過重寫Comparable介面的compareTo方法,可以讓程式按照我們想要的相片順序進行排序,如:這裡我讓Person按照order屬性升序排序。

2)、測試類別

public static void main(String[] args) {    //初始化資料    List<Person> listA = new ArrayList<Person>();    Person p1 = new Person();    Person p2 = new Person();    Person p3 = new Person();     p1.setName("name1");    p1.setOrder(1);    p2.setName("name2");    p2.setOrder(2);    p3.setName("name3");    p3.setOrder(3);     listA.add(p2);    listA.add(p1);    listA.add(p3);    //排序    Collections.sort(listA);    //列印排序後的Person    for (Person p : listA) {        System.out.println(p.getName());    }}

3)、結果:

name1name2name3

3、通過重載Collections.sort方法                    

直接重載java.util.Collections.sort(java.util.List, java.util.Comparator) 方法。可以靈活的修改我們排序的方式,具體實現如下:

1)、Person實體類

  和上面的類相同,但沒實現Comparable介面

public class Person {    private String name;    private Integer order;     /**     * @return the name     */    public String getName() {        return name;    }     /**     * @param name     *            the name to set     */    public void setName(String name) {        this.name = name;    }     /**     * @return the order     */    public Integer getOrder() {        return order;    }     /**     * @param order     *            the order to set     */    public void setOrder(Integer order) {        this.order = order;    } }

2)、測試類別

public static void main(String[] args) {        List<Person> listA = new ArrayList<Person>();        Person p1 = new Person();        Person p2 = new Person();        Person p3 = new Person();         p1.setName("name1");        p1.setOrder(1);        p2.setName("name2");        p2.setOrder(2);        p3.setName("name3");        p3.setOrder(3);         listA.add(p2);        listA.add(p1);        listA.add(p3);                 //直接在這裡添加我們的定序        Collections.sort(listA, new Comparator<Person>() {            public int compare(Person arg0, Person arg1) {                return arg0.getOrder().compareTo(arg1.getOrder());            }        });                 for (Person p : listA) {            System.out.println(p.getName());        }    }

從上面看到,直接在Conllections.sort()方法中重寫了一個Comparator介面,可以在不同的地方使用Person集合的不同排序方法。如上面還是按照Person的order屬性升序排列,我只要改寫該方法,就可以在其他地方按照其他的規則對我的list集合進行排序,但是這樣子代碼看起來會比前面的那種方式繁瑣。

3)、結果

name1name2name3

  致謝:感謝您的閱讀!

 

 

4.擴充:按照兩個欄位排序      

比如先按照名字排序,如果名字相同,按照小名排序;例子如下:

package com.cy.model;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Student implements Comparable<Student>{    private int id;    private String name;    //名字    private String sname;    //小名        public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSname() {        return sname;    }    public void setSname(String sname) {        this.sname = sname;    }    public Student(int id, String name, String sname) {        super();        this.id = id;        this.name = name;        this.sname = sname;    }    @Override    public String toString() {        return "Student [id=" + id + ", name=" + name + ", sname=" + sname                + "]";    }    /**     * student類的排序方法     * 先按照name排序,如果name相同按照sname排序     */    @Override    public int compareTo(Student o) {        int r1 = this.getName().compareToIgnoreCase(o.getName());        int r2 = this.getSname().compareToIgnoreCase(o.getSname());                return  r1>0?1:                r1<0?-1:                r2>0?1:                r2<0?-1:0;    }        //測試程式    public static void main(String[] args) {        Student s1 = new Student(2,"zhangsan","z");        Student s2 = new Student(1, "zhangsan","b");        Student s3 = new Student(3, "zhangsan","y");        Student s4 = new Student(0, "lisi","s");        Student s5 = new Student(5, "wangwu","w");        Student s6 = new Student(10, "wangwu","xx");        Student s7 = new Student(8, "aming","ming");                List<Student> list = new ArrayList<Student>();        list.add(s1);list.add(s2);list.add(s3);list.add(s4);        list.add(s5);list.add(s6);list.add(s7);                Collections.sort(list);                for(Student s : list){            System.out.println(s);        }    }    }

列印:

Student [id=8, name=aming, sname=ming]Student [id=0, name=lisi, sname=s]Student [id=5, name=wangwu, sname=w]Student [id=10, name=wangwu, sname=xx]Student [id=1, name=zhangsan, sname=b]Student [id=3, name=zhangsan, sname=y]Student [id=2, name=zhangsan, sname=z]

 

(轉載)java list排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.