Java集合框架--List 排序

一、Java List 類(lèi)
二、Java List 排序
三、Java List 遍歷
四、Java List 去重
五、Java List 轉(zhuǎn)Array

二、Java List排序(兩種方法)

1. 利用Collections類(lèi)的 java.util.Collections.sort(java.util.List, java.util.Comparator) 方法,自定義比較器對(duì)象對(duì)指定對(duì)象進(jìn)行排序
對(duì)Person類(lèi)對(duì)象按照起身高(降序)排序,當(dāng)升高相同按id升序

class Person{
    private int id;
    private String name;
    private float tall;
    
    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 float getTall()  {return tall;}
    public void setTall(float tall)  {this.tall = tall;}
}
//比較器
class PersonComparator implements Comparator<Person>{
    public int compare(Person p1, Person p2 ) {
        if ( p1.getTall() > p2.getTall() ) return -1;
        else if ( p1.getTall() == p2.getTall() ) {
            if (p1.getId() > p2.getId() ) return 1;
            else if ( p1.getId() == p2.getId() ) return 0;
            else return -1;
        } 
        else return 1;
    }
}

public class listSort {
    public static void main(String[] args) {
        // TODO Auto-generated method 
        Person p1 = new Person();
        p1.setId(005);  p1.setName("Jerry");  p1.setTall(165);
        
        Person p2 = new Person();
        p2.setId(003);  p2.setName("Morty");  p2.setTall(171.1f);
        
        Person p3 = new Person();
        p3.setId(001); p3.setName("Rick"); p3.setTall(176);
        
        Person p4 = new Person();
        p4.setId(004);  p4.setName("Tom");  p4.setTall(171.1f);
        
        List<Person> list = new ArrayList<>();
        list.add(p1); list.add(p4); list.add(p3); list.add(p2);

        System.out.println("*****before sort*****");
        for(Person ps:list) 
            System.out.println("id: "+ps.getId()+ " name: "+ps.getName() + " score: " + ps.getTall() );
        Collections.sort(list, new PersonComparator());
        System.out.println("*****after sort*****");
        for(Person ps:list) 
            System.out.println("id: "+ps.getId()+ " name: "+ps.getName() + " score: " + ps.getTall() );
    }
}

運(yùn)行結(jié)果

*****before sort*****
id: 5 name: Jerry score: 165.0
id: 4 name: Tom score: 171.1
id: 1 name: Rick score: 176.0
id: 3 name: Morty score: 171.1
*****after sort*****
id: 1 name: Rick score: 176.0
id: 3 name: Morty score: 171.1
id: 4 name: Tom score: 171.1
id: 5 name: Jerry score: 165.0

2. 利用Collections類(lèi)的 java.util.Collections.sort(java.util.List, java.util.Comparator) 方法,自定義比較器對(duì)象對(duì)指定對(duì)象進(jìn)行排序
對(duì)一個(gè)Person類(lèi),讓其按照一個(gè)Order屬性進(jìn)行排序,我們可以讓Person類(lèi)實(shí)現(xiàn)Comparable接口,重寫(xiě)其CompareTo方法即可,如:讓Person按照身高屬性升序排序。

class Person implements Comparable<Person>{
    private String name;
    private Integer tall;                                   //compareTo只能是對(duì)象之間的比較,不能適用于int等基本類(lèi)型,要使用int的封裝類(lèi)型Integer
    
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    
    public Integer getTall() {return tall;}                 
    public void setTall(Integer tall) {this.tall = tall;}
    
    public int compareTo(Person ps) {                       //compareTo只能是對(duì)象之間的比較,不能適用于int boolean等基本類(lèi)型
        return this.getTall().compareTo( ps.getTall() );    //這里定義排序規(guī)則
    }                                                       
}
public class listSort2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Person> list = new ArrayList<>();
        Person p1 = new Person();  Person p2 = new Person(); Person p3 = new Person();
     
        p1.setName("Rick");     p1.setTall(174);
        p2.setName("Morty");    p2.setTall(178);
        p3.setName("Jerry");    p3.setTall(176);
        
        list.add(p1);   list.add(p2);   list.add(p3);
        //排序
        Collections.sort(list);
        for (Person p : list) {
            System.out.println(p.getName());
        }
    }
}

運(yùn)行結(jié)果

Rick
Jerry
Morty
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容