java 之 Collections集合工具類排序


數組有工具類Arrays,集合也有一個工具類Collections。

sort方法:

sort(List<T> list):根據其元素natural ordering對制定的列表進行排序
sort(List<T> list, Comparator<? super T> c):根據指定的比較器引起的順序對指定的列表進行排序

  

案例:

package com.gongxy.demo;

public class Persion implements Comparable<Persion>{
    private String no;
    private String name;
    private int age;
    private double socre;

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSocre() {
        return socre;
    }

    public void setSocre(double socre) {
        this.socre = socre;
    }

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

    /*
    根據年齡排序
     */
    @Override
    public int compareTo(Persion o) {
        //return this.age - o.age;//按照年齡升序
        return o.age - this.age;//按照年齡降序
    }
}
package com.gongxy.demo;

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

/**
 * Collections集合工具類排序
 * 主要是針對list的排序
 * Comparable和Comparator兩個比較器達到的目的都是一樣的,但實現方法兩種:一種是再該Persion類中直接定義,一個是假借他人之手來制定規則,我們做的時制定規則
 * Comparable和Comparator兩個接口的區別
 * Comparable:這種排序為類的自然排序,類的compareTo方法被稱為它的自然方法。只能在類中實現compareTo()一次,不能經常修改類的代碼實現自己想要的排序。無需制定比較器
 * Comparator:可以將Comparator傳遞給sort方法,從而允許在排序順序上實現精確控制,還可以使用Comparator來控制耨寫數據結構的順序,或者誒那些沒有自然順序的對象Collection提供排序
 */
public class ListSortTest {
    public static void main(String[] args) {
        //comparableTest();
        comparatorTest();
    }

    /**
     * 自然順序
     * java.lang.Comparable接口
     * 一個類實現了此接口,才表示這個類的對象是可以被排序的
     * int compareTo(object o);
     * 排序方法返回值規則
     *  如果當前對象小於傳入對象,則返回任意負整數
     *  如果當前對象等於傳入對象,返回0
     *  如果當前對象大於傳入對象,則返回任意正整數
     * 排序方法
     *  使用Collections.sort方法來對list集合排序,要求list集合中的對象必須要實現java.lang.Comparable接口
     */
    static void comparableTest(){
        List<Persion> list = createPersonList();
        Collections.sort(list);
        System.out.println(list);
        //[Persion{no='3', name='gongxh', age=1, socre=62.5}, Persion{no='3', name='gongxy', age=3, socre=68.5}, Persion{no='1', name='gongyg', age=29, socre=98.5}, Persion{no='2', name='gumd', age=31, socre=95.2}]
    }

    /**
     * 自定義排序
     * java.lang.Comparator
     */
    static void comparatorTest(){
        List<Persion> list = createPersonList();
        Collections.sort(list, new ComparatorDemo());
        System.out.println(list);
    }

    static List<Persion> createPersonList(){
        List<Persion> list = new ArrayList<Persion>();
        Persion p = new Persion();
        p.setNo("1");
        p.setName("gongyg");
        p.setAge(29);
        p.setSocre(98.5);
        list.add(p);
        p = new Persion();
        p.setNo("2");
        p.setName("gumd");
        p.setAge(31);
        p.setSocre(95.2);
        list.add(p);
        p = new Persion();
        p.setNo("3");
        p.setName("gongxy");
        p.setAge(3);
        p.setSocre(68.5);
        list.add(p);
        p = new Persion();
        p.setNo("3");
        p.setName("gongxh");
        p.setAge(1);
        p.setSocre(62.5);
        list.add(p);
        return list;
    }
}

/**
 * 自定義一個排序方式
 */
class ComparatorDemo implements Comparator<Persion> {
    @Override
    public int compare(Persion o1, Persion o2) {
        return (int)(o1.getSocre() - o2.getSocre());
    }
}

  


免責聲明!

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



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