天天看點

集合------Collections集合工具類(Comparable和Comparator)Collections

目錄

  • 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]
*/
           

分析-總結:

  1. 采用的

    public static <T> void sort(List<T> list)

    這個方法完成的排序,實際上要求了被排序的類型需要實作Comparable接口完成比較的功能
  2. String類實作了這個Comparable接口,并完成了比較規則的定義
    public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
    	....
        @Override
        public String compareTo(String o) {
            ......
        }
    }
               
  3. 但這種自己實作comparable然後進行比較,就把規則寫死了,如果想要字元串按照第一個字元降序排列,那麼這樣就要修改String的源代碼,這是不可能的了。
  4. 針對上述要求,使用

    public static <T> void sort(List<T> list,Comparator<? super T> )

    方法可以靈活實作,該方法中就涉及到了Comparator這個接口。

再分析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提供排序。