1. 程式人生 > >Java的Arrays類介紹

Java的Arrays類介紹

Arrays

此類包含用來運算元組(比如排序和搜尋)的各種方法。此類還包含一個允許將陣列作為列表來檢視的靜態工廠。

多種方法 都是 static

多個字串轉list

List<String> strList = Arrays.asList("abc","def","cde");
//asList原始碼
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

陣列轉字串 (可以當迴圈遍歷輸出)

System.
out.println(Arrays.toString(arr));
//toString 原始碼  重寫了Object的toString()
    public static String toString(long[] a) {
        if (a == null)
            return "null";		//傳入陣列為null,返回"null"
        int iMax = a.length - 1;	//拿最大索引值
        if (iMax == -1)			//數組裡沒元素返回"[]"
            return "[]";

        StringBuilder b =
new StringBuilder(); //執行緒不安全,但高效 b.append('['); //加前[入緩衝區 for (int i = 0; ; i++) { b.append(a[i]); //加元素 if (i == iMax) return b.append(']').toString();//加末尾[並轉為String b.append(", "); } }

陣列排序

Arrays.sort(arr);//快速排序

二分查詢法

// 二分查詢還可以查詢好多東西
int [] arr {1,2,3,4,5,6,7,8};//arr必須先排序,不然不能確定返回是什麼
System.out.println(Arrays.binarySearch(arr,3));//返回下標值
System.out.println(Arrays.binarySearch(arr,0));//負的插入點-1(-2)
  private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex; 		//最小索引
        int high = toIndex - 1;	//最大索引陣列長度-1

        while (low <= high) {		//最小索引小於等於最大索引可以迴圈
            int mid = (low + high) >>> 1;	//求出中間索引值,(最大+最小)/2
            int midVal = a[mid];	//通過中間索引獲取中間值

            if (midVal < key)		//中間索引對應的值小於查詢的值
                low = mid + 1;	//最小索引變化
            else if (midVal > key)	//中間索引對應的值大於查詢值
                high = mid - 1;	//最大索引變化
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }
複製陣列copyOf()方法
Arrays.copyOf(int [] arr ,int len)  //從0開始 長度為len
   public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
        @SuppressWarnings("unchecked")
        T[] copy = ((Object)newType == (Object)Object[].class)
            ? (T[]) new Object[newLength]
            : (T[]) Array.newInstance(newType.getComponentType(), newLength);
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
         //這裡依然是使用了System.arraycopy方法,前面提到過,它是native方法,作用是對陣列的
         //複製,之前在String類中也提到了它,
        return copy;
    }

希望大家多看一下:Java方法之–System.arraycopy方法和Arrays.copyOf()

複製陣列copyOfRange()方法
Arrays.copyOfRange(int [] arr,int start,int end) //包含頭不包含尾
fill函式 填滿
Arrays.fill(); //用於填滿陣列的函式
比較兩個陣列
Arrays.equals(arr1, arr2);
    public static boolean equals(int[] a, int[] a2) {
        if (a==a2)				//兩陣列地址一樣返回true
            return true;
        if (a==null || a2==null)		// 如果兩陣列任一陣列為null 返回false
            return false;		

        int length = a.length;		//如果長度不同 ,返回false
        if (a2.length != length)
            return false;			

        for (int i=0; i<length; i++)		//一一對比,如果有一個不一樣返回false
            if (a[i] != a2[i])
                return false;

        return true;				//到這裡還沒返回,那麼返回true
    }