List集合排序 sort方法


List集合排序

sort方法:

  • public static void sort(List list) :將集合中元素按照默認規則排序。

  • public static void sort(List list,Comparator<? super T> ) :將集合中元素按照指定規則排

序。

sort方法的重載使用1

1.字符串作為集合中的類型進行排序

public class Demo {
    public static void main(String[] args) {
        //定義一個字符串的list集合,並排序
        List<String> list = new ArrayList<>();
        list.add("123");
        list.add("213");
        list.add("abc");
        list.add("aac");
        list.add("112");
        list.add("224");
        list.add("223");
        list.add("Aac");
        System.out.println(list);
        //[123, 213, abc, aac, 112, 224, 223, Aac]

        Collections.sort(list);
        System.out.println(list);
        //[112, 123, 213, 223, 224, Aac, aac, abc]
    }
}

如果想要使用該方法進行排序,條件是:集合中的類型T必須是Comparable的子類型

String是Comparable的子類型,所以支持排序。

字符串排序的規則:先從字符串中的第一個字符開始比較其編碼的大小,按照升序排序。如果第一個相同比較第二個,如果第二個相同比較第三個.......

2.自定義類型實現排序

自定義學生類型含有年齡,名稱屬性,創建多個學生對象。放入List集合按照年齡升序排序。

package com.liqiliang.demo02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        list.add(new Student("迪麗熱巴",28));
        list.add(new Student("嗚嗚",20));
        list.add(new Student("馬爾扎",19));

        Collections.sort(list);
        System.out.println(list);
        //[Student{name='嗚嗚', age=20}, Student{name='馬爾扎', age=19}, Student{name='迪麗熱巴', age=28}]
    }
}


class Student implements Comparable<Student>{
    String name;
    int age;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Student o) {
        //如何重寫方法
        //按年齡升序排序比較
        //this(當前調用方法的對象)   o(參數傳入)
        //所有比較最底層的邏輯都是發生兩兩比較邏輯的,返回比較結果
        //只關心結果結果三種:
        //正數:   this.age - o.age    >
        //負數:   this.age - o.age    <
        //0       this   ==


//        return this.age-o.age; 升序排序
//        return o.age-this.age; 降序排序
        //按照名字字符串長度升序排序
        return this.name.length()-o.name.length();
    }
}

sort方法的重載使用2

  • public static void sort(List list,Comparator<? super T> ) :將集合中元素按照指定規則排

序。

方法可以可以接收任意類型的數據,以進行排序。T沒有要求

不管T是否是Comparable的子類型,都無所謂了。采用的標准是Comparator的比較標准。

int compare(T o1, T o2);

目的就是為了比較o1和o2的大小
原始的排序:o1 , o2
返回值int:只關心正負或者0
  如果返回值為負數:o1 < o2   ==> o1 o2
  如果返回值為正數:o1 > o2   ==> o2 o1
  如果返回值為0:o1 == o2   ==> o1 o2
public class Demo01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("abc12");
        list.add("AA");
        list.add("1ab123123");
        list.add("abdsdfsd");
        list.add("Abcsdfsfsdfsdsdg");
        list.add("2bcsd");
        Collections.sort(list);
        System.out.println("list = " + list);
        //按照字符串的長度升序排序
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        });
        System.out.println("list = " + list);

    }
}

區別:

Comparable:是讓一個類具備比較排序的功能

Comparator:自己定義的一個比較器

注意:如果比較的屬性類型是浮點型

 public int compareTo(T o); //抽象方法
//子類實現后,需要進行重寫

返回值int,只關心正負或者0,不需要關系具體值
  
原始排序:this【我】  o【他】
如果要升序排序:我減他
如果要降序排序:他-我
    
如果比較的屬性類型是浮點型:
    this.score = 99.9     o.score = 99.5
  	if(this.score>o.score){
        return 1;
    }else if(this.score<0.score){
        return -1;
    }else{
        return 0;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM