陣列中基本操作的排序、搜尋與比較等動作是很常見的,在Java中提供了Arrays類別可以協助您作這幾個動作,Arrays類別位於java.util套件中,它提供了幾個靜態方法可以直接呼叫使用。
| sort() |
這個方法可以幫助您對指定的陣列排序,所使用的是快速排序法 |
| binarySearch() |
這個方法可以讓您對已排序的陣列進行二元搜尋,如果找到指定的值就傳回該值所
在的索引,否則就麼回負值 |
| fill() |
當我們配置一個陣列之後,其會依資料型態來給定預設值,例如整數陣列就初始為
0,您可以使用Arrays.fill()方法來將所有的元素設定為指定的值 |
| equals() |
比較兩個陣列中的元素值是否全部相等,如果是將傳回true,否則傳回
false |
下面這個程式示範陣列的排序與搜尋:
import java.util.Scanner; import java.util.Arrays; public class UseArrays { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] arr = {93, 5, 3, 55, 57, 7, 2 ,73, 41, 91}; System.out.print("排序前: "); for(int i = 0; i < arr.length; i++) System.out.print(arr[i] + " "); System.out.println(); Arrays.sort(arr); System.out.print("排序後: "); for(int i = 0; i < arr.length; i++) System.out.print(arr[i] + " "); System.out.print("\n請輸入搜尋值: "); int key = scanner.nextInt(); int find = -1; if((find = Arrays.binarySearch(arr, key)) > -1) { System.out.println("找到值於索引 " + find + " 位置"); } else System.out.println("找不到指定值"); } }
執行結果:
排序前: 93 5 3 55 57 7 2 73 41 91
排序後: 2 3 5 7 41 55 57 73 91 93
請輸入搜尋值: 3
找到值於索引 1 位置
|
下面這個程式示範陣列的填充與比較:
import java.util.Arrays; public class UseArrays { public static void main(String args[]) { int[] arr1 = new int[10]; int[] arr2 = new int[10]; int[] arr3 = new int[10]; Arrays.fill(arr1, 5); Arrays.fill(arr2, 5); Arrays.fill(arr3, 10); System.out.print("arr1: "); for(int i = 0; i < arr1.length; i++) System.out.print(arr1[i] + " "); System.out.println("\narr1 = arr2 ? " + Arrays.equals(arr1, arr2)); System.out.println("arr1 = arr3 ? " + Arrays.equals(arr1, arr3)); } }
執行結果:
arr1: 5 5 5 5 5 5 5 5 5 5
arr1 = arr2 ? true
arr1 = arr3 ? false
|
請注意到,您不可以用==來比較兩個陣列的元素值是否相等,==使用於物件比對時,是用來比對兩個物件名稱是否參考至同一個物件,下面這個程式是個簡單的
示範:
public class TestEqual { public static void main(String[] args) { int[] arr1 = new int[5]; int[] arr2 = new int[5]; int[] tmp = arr1; System.out.println(arr1 == tmp); System.out.println(arr2 == tmp); } }
執行結果:
事實上,J2SE 5.0
對Arrays類別作了不少的修改與新增,由此可見陣列操作在程式中的重要性,這邊介紹Arrays新增的兩個方法:deepEquals()與deepToString()。
| deepEquals() |
對陣列作深層比較,簡單的說,您可以對二維仍至三維以上的陣列進行比較是否相
等 |
| deepToString() |
將陣列值作深層輸出,簡單的說,您可以對二維仍至三維以上的陣列輸出其字串值 |
直接來看個程式比較清楚:
import java.util.Arrays; public class UseArrays { public static void main(String args[]) { int[][] arr1 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int[][] arr3 = {{0, 1, 3}, {4, 6, 4}, {7, 8, 9}}; System.out.println("arr1 equals arr2? " + Arrays.deepEquals(arr1, arr2)); System.out.println("arr1 equals arr3? " + Arrays.deepEquals(arr1, arr3)); System.out.println("arr1 deepToString()\n\t" + Arrays.deepToString(arr1)); } }
執行結果:
arr1 equals arr2? true
arr1 equals arr3? false
arr1 deepToString()
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
|
當然Arrays並不只有以上介紹的功能,總之,如果您之前對Arrays沒這麼的重視,在J2SE
5.0之後,您可以多關照它幾眼,如果您有陣列操作方面的相關需求,可以先查查 java.util.Arrays
的API文件。 |
|