1. 程式人生 > >Java中的Arrays類使用詳解

Java中的Arrays類使用詳解

首先先建立一個列印陣列的方法,方便後面直接使用

public static void output(int []a) {
        for(int i=0;i<a.length;i++) {
            System.out.printf(a[i]+" ");
        }
        System.out.println();
}

1、填充陣列:fill

eg1.

int []arr = new int[5];
Arrays.fill(arr, 2);
output(arr);

結果是:2 2 2 2 2
分析:給所有值賦值2
eg2.

int []arr = new int[5];
Arrays.fill(arr, 1,3,8);
output(arr);

結果是:0 8 8 0 0
分析:給第1位(0開始)到第3位(不包括)賦值8

2、陣列元素排序:sort

eg1.

int []arr = {3,2,1,5,4};
Arrays.sort(arr);
output(arr);

結果是:1 2 3 4 5
分析:給所有數按升序排序
eg2.

int []arr = {3,2,1,5,4};
Arrays.sort(arr,1,3);
output(arr);

結果是:3 1 2 5 4
分析:給第1位(0開始)到第3位(不包括)排序

3、比較陣列元素是否相等:equals

int []arr1 = {1,2,3};
int []arr2 = {1,2,3};
System.out.println(Arrays.equals(arr1,arr2));

結果是:true
分析:如果是arr1.equals(arr2),則返回false,因為equals比較的是兩個物件的地址,不是裡面的數,而Arrays.equals重寫了equals,所以,這裡能比較元素是否相等。
這裡補充一下,如果還是不用Arrays.equals,那麼我們應該如何重寫equals來比較兩個陣列的元素是否相等呢?這裡提供一段程式碼

//Compare the contents of two int arrays
public static boolean isEquals(int[] a, int[] b) { if( a == null || b == null ) { return false; } if(a.length != b.length) { return false; } for(int i = 0; i < a.length; ++i ) { if(a[i] != b[i]) { return false; } } return true; }

4、二分查詢法找指定元素的索引值(下標):binarySearch

陣列一定是排好序的,否則會出錯。找到元素,只會返回最後一個位置
eg1:

int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 20));

結果是:1
分析:能找到該元素,返回下標為1(0開始)
eg2:

int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 35));

結果是:-4
分析:找不到元素,返回-x,從-1開始數,如題,返回-4
eg3:

int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,30));

結果是:2
分析:從0到3位(不包括)找30,找到了,在第2位,返回2
eg4:

int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,40));

結果是:-4
分析:從0到3位(不包括)找40,找不到,從-1開始數,返回-4

5、擷取陣列:copeOf和copeOfRange

eg1: copy

int []arr = {10,20,30,40,50};
int []arr1 = Arrays.copyOf(arr, 3);
output(arr1);

結果:10 20 30
分析:擷取arr陣列的3個元素賦值給姓陣列arr1
eg2: copyOfRange

int []arr = {10,20,30,40,50};
int []arr1 = Arrays.copyOfRange(arr,1,3);
output(arr1);

結果:20 30
分析:從第1位(0開始)擷取到第3位(不包括)

6、其他

還有hashCode,toString,clone等這裡就不介紹了,暫時用的少