目錄
- Collections
-
- Collections常用功能
- Comparator比較器
-
- 先分析comparable
- 再分析comparator
- Comparable和Comparator比較
Collections
java.utils.Collections
是集合工具類,用來對集合進行操作。
Collections常用功能
部分方法如下:
-
:往集合中添加一些元素。public static <T> boolean addAll(Collection<T> c, T... elements)
-
:打亂集合順序。public static void shuffle(List<?> list) 打亂順序
-
:将集合中元素按照預設規則排序。public static <T> void sort(List<T> list)
-
:将集合中元素按照指定規則排序。public static <T> void sort(List<T> list,Comparator<? super T> )
代碼示範:
public class CollectionsDemo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
//原來寫法
//list.add(12);
//list.add(14);
//list.add(15);
//list.add(1000);
//采用工具類 完成 往集合中添加元素
Collections.addAll(list, 5, 222, 1,2);
System.out.println(list);
//排序方法
Collections.sort(list);
System.out.println(list);
}
}
/*
結果:
[5, 222, 1, 2]
[1, 2, 5, 222]
*/
Comparator比較器
在JAVA中提供了兩種比較實作的方式:
一種是比較死闆的采用
java.lang.Comparable
接口去實作,
一種是靈活的當我需要做排序的時候在去選擇的
接口完成。
java.util.Comparator
先分析comparable
探究如下方法:
public static <T> void sort(List<T> list)
:将集合中元素按照預設規則排序(自然排序)。
方法示例:
public class CollectionsDemo {
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]
*/
分析-總結:
- 采用的
這個方法完成的排序,實際上要求了被排序的類型需要實作Comparable接口完成比較的功能public static <T> void sort(List<T> list)
- String類實作了這個Comparable接口,并完成了比較規則的定義
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { .... @Override public String compareTo(String o) { ...... } }
- 但這種自己實作comparable然後進行比較,就把規則寫死了,如果想要字元串按照第一個字元降序排列,那麼這樣就要修改String的源代碼,這是不可能的了。
- 針對上述要求,使用
方法可以靈活實作,該方法中就涉及到了Comparator這個接口。public static <T> void sort(List<T> list,Comparator<? super T> )
再分析comparator
簡述:
- Comparator接口位于位于java.util包下
- 排序是comparator能實作的功能之一
- 該接口代表一個比較器,比較器具有可比性!顧名思義就是做排序的
comparator接口的方法 — compare() :
public int compare(String o1, String o2)
:比較其兩個參數的順序(string可以換成object或者根據要比較的對象換成相應格式)
兩個對象比較的結果有三種:大于,等于,小于。
如果要按照升序排序:
則o1 小于o2,傳回(負數),相等傳回0,01大于02傳回(正數)
如果要按照降序排序 :
則o1小于o2,傳回(正數),相等傳回0,01大于02傳回(負數)
Comparable和Comparator比較
Comparable:強行對實作它的每個類的對象進行整體排序。這種排序被稱為類的自然排序,類的compareTo方法被稱為它的自然比較方法。隻能在類中實作compareTo()一次,不能經常修改類的代碼實作自己想要的排序。實作此接口的對象清單(和數組)可以通過Collections.sort(和Arrays.sort)進行自動排序,對象可以用作有序映射中的鍵或有序集合中的元素,無需指定比較器。
Comparator:強行對某個對象進行整體排序。可以将Comparator 傳遞給sort方法(如Collections.sort或 Arrays.sort),進而允許在排序順序上實作精确控制。還可以使用Comparator來控制某些資料結構(如有序set或有序映射)的順序,或者為那些沒有自然順序的對象collection提供排序。