【java】Arrays類

love_Aym發表於2018-04-02

導包:import.java.util.Arrays

用途:此類包含用來運算元組的各種方法,比如排序和搜尋。

工具類:

  • 一般工具類中的方法都是靜態方法,可以直接使用類名呼叫。
  • 同時工具類的構造方法一般會被私有化,因為不允許外界對其建立物件例項化。類在例項化會首先呼叫建構函式對其進行初始化,而如果私有構造的話就無法進行初始化,那麼這個空物件也就沒什麼意義了。

 除非特別註明,否則如果指定陣列引用為null,則 此類中的方法都會丟擲 NullPointerException


1、public static String toString(arr)

  • 把陣列轉換成字串進行輸出。
  • 引數是陣列,返回的是字串
  • 字串表示形式由陣列的元素列表組成,括在方括號("[]")中。相鄰元素用字元 ", "(逗號加空格)分隔。這些元素通過 String.valueOf(short) 轉換為字串。如果 a 為 null,則返回 "null"。
  • 原始碼:
public static String toString(int[] a) {
    if (a == null)     //如果傳入的陣列是null
        return "null";   //返回null
    int iMax = a.length - 1;   //iMax是最大索引
    if (iMax == -1)   //如果陣列中沒有元素,則返回[]
        return "[]";

    StringBuilder b = new StringBuilder();   //執行緒不安全,效率高
    b.append('[');    //將[新增到字串緩衝區
    for (int i = 0; ; i++) {   //遍歷陣列,判斷語句滅有寫預設true
        b.append(a[i]);        //把第一元素新增進字串緩衝區
        if (i == iMax)          //如果索引等於了最大索引值
            return b.append(']').toString();  //將]新增到字串緩衝區,在轉換成字串並返回
        b.append(", ");      //如果不等於最大索引就將,新增到緩衝區。
    }
}

2public static void sort(arr)

  •  對陣列元素進行排序操作,預設由小到大排序。
  • 該方法的引數不僅可以是基礎資料型別的陣列,也可以是物件引用的陣列。當對物件進行排序時,陣列中的所有元素都必須實現 Comparable 介面。即陣列中的所有元素都必須是可相互比較的(也就是說,對於陣列中的任何 e1 和 e2 元素而言,e1.compareTo(e2) 不得丟擲 ClassCastException)。
  •  同時還可以指定陣列中需要排序的元素的索引範圍。
  • 原始碼:快速排序

3public static int binarySearch(int [] a, int key)

  • 使用二分搜尋法來搜尋指定型別陣列,以獲得指定的值。
  • 前提:必須在進行此呼叫之前對陣列進行排序(通過 sort() 方法)。如果沒有對陣列進行排序,則結果是不確定的。如果陣列包含多個帶有指定值的元素,則無法保證找到的是哪一個。
  • 如果它包含在陣列中,則返回搜尋鍵的索引;否則返回 (-(插入點) - 1)插入點被定義為將鍵插入陣列的那一點:即第一個大於此鍵的元素索引,如果陣列中的所有元素都小於指定的鍵,則為a.length。注意,這保證了當且僅當此鍵被找到時,返回的值將 >= 0。
  • 原始碼
public static int binarySearch(int[] a, int key) {
    return binarySearch0(a, 0, a.length, key);
}

//也可以是從一段區間中查詢
public static int binarySearch(int[] a, int fromIndex, int toIndex,
                               int key) {
    rangeCheck(a.length, fromIndex, toIndex);
    return binarySearch0(a, fromIndex, toIndex, key);
}

//注意,Java中個給的二分,只是說這段區間中有沒有,並返回該index,而不是返回第一個出現的位置或者是最後一次出現的位置
private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                 int key) {
    int low = fromIndex;
    int high = toIndex - 1;

    while (low <= high) {
        int mid = (low + high) >>> 1;
        int midVal = a[mid];

        if (midVal < key)
            low = mid + 1;
        else if (midVal > key)
            high = mid - 1;
        //居然是找到了就返回
        else
            return mid; // key found
    }
    //並不是找不到就返回-1,而是-(low + 1),所以區間查詢的話,判有沒有要看的是該index的正負
    return -(low + 1);  // key not found.
}



相關文章