Collections集合工具类的方法_sort(List)
Comparator比較器
我們還是先研究這個方法
public static <T> void sort(List<T> list):將集合中元素按照默認規則排序。
不過這次存儲的是字符串類型。
public class CollectionsDemo2 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("cba");list.add("aba");list.add("sba");list.add("nba");//排序方法Collections.sort(list);System.out.println(list);} }結果:
[aba, cba, nba, sba]我們使用的是默認的規則完成字符串的排序,那么默認規則是怎么定義出來的呢?
說到排序了,簡單的說就是兩個對象之間比較大小,那么在JAVA中提供了兩種比較實現的方式,一種是比較死板的采用java.lang.Comparable接口去實現,一種是靈活的當我需要做排序的時候在去選擇的java.util.Comparator接口完成。
那么我們采用的public static <T> void sort(List<T> list)這個方法完成的排序,實際上要求了被排序的類型需要實現Comparable接口完成比較的功能,在String類型上如下:
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {String類實現了這個接口,并完成了比較規則的定義,但是這樣就把這種規則寫死了,那比如我想要字符串按照第一個字符降序排列,那么這樣就要修改String的源代碼,這是不可能的了,那么這個時候我們可以使用
public static <T> void sort(List<T> list,Comparator<? super T> )方法靈活的完成,這個里面就涉及到了Comparator這個接口,位于位于java.util包下,排序是comparator能實現的功能之一,該接口代表一個比較器,比較器具有可比性!顧名思義就是做排序的,通俗地講需要比較兩個對象誰排在前誰排在后,那么比較的方法就是:
-
public int compare(String o1, String o2):比較其兩個參數的順序。
兩個對象比較的結果有三種:大于,等于,小于。
如果要按照升序排序,則o1 小于o2,返回(負數),相等返回0,01大于02返回(正數)如果要按照降序排序則o1 小于o2,返回(正數),相等返回0,01大于02返回(負數)
操作如下:
public class CollectionsDemo3 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("cba");list.add("aba");list.add("sba");list.add("nba");//排序方法 按照第一個單詞的降序Collections.sort(list, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o2.charAt(0) - o1.charAt(0);}});System.out.println(list);} }結果如下:
[sba, nba, cba, aba] package com.learn.demo05.Collections;import java.util.ArrayList; import java.util.Collections;/*- java.utils.Collections是集合工具類,用來對集合進行操作。部分方法如下:public static <T> void sort(List<T> list):將集合中元素按照默認規則排序。注意:sort(List<T> list)使用前提被排序的集合里邊存儲的元素,必須實現Comparable,重寫接口中的方法compareTo定義排序的規 則Comparable接口的排序規則:自己(this)-參數:升序*/ public class Demo02Sort {public static void main(String[] args) {ArrayList<Integer> list01 = new ArrayList<>();list01.add(1);list01.add(3);list01.add(2);System.out.println(list01);//[1, 3, 2]//public static <T> void sort(List<T> list):將集合中元素按照默認規則排序。Collections.sort(list01);//默認是升序System.out.println(list01);//[1, 2, 3]ArrayList<String> list02 = new ArrayList<>();list02.add("a");list02.add("c");list02.add("b");System.out.println(list02);//[a, c, b]Collections.sort(list02);System.out.println(list02);//[a, b, c]ArrayList<Person> list03 = new ArrayList<>();list03.add(new Person("張三",18));list03.add(new Person("李四",20));list03.add(new Person("王五",15));System.out.println(list03);//[Person{name='張三', age=18}, Person{name='李四', age=20}, Person{name='王五', age=15}]Collections.sort(list03);System.out.println(list03);} } package com.learn.demo05.Collections;public class Person implements Comparable<Person>{private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}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;}//重寫排序的規則@Overridepublic int compareTo(Person o) {//return 0;//認為元素都是相同的//自定義比較的規則,比較兩個人的年齡(this,參數Person)//return this.getAge() - o.getAge();//年齡升序排序return o.getAge() - this.getAge();//年齡升序排序} }?
總結
以上是生活随笔為你收集整理的Collections集合工具类的方法_sort(List)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Collections集合工具类的方法_
- 下一篇: Collections集合工具类的方法_