数组有工具类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()); } }