數組有工具類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()); } }