Java的Arrays類介紹
阿新 • • 發佈:2018-11-21
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
}