——Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ——-
一 複製數組
Java在System類中提供了一個特殊的方法arraycopy(),用於實現數組之間的複製操作。
複製數組。
創建CopyArray類,在main()方法中輸入以下程序關鍵代碼:
int i;
int arr1[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; // 源數組
int arr2[] = new int[10]; // 複製數組
System.arraycopy(arr1, 0, arr2, 0, arr1.length); // 將arr1數組複製到arr2數組
System.out.println("複製後arr2中的元素爲:");
for (i = 0; i < arr2.length; i++)
System.out.print(arr2[i] + ","); // 打印arr2數組
System.out.println();
代碼說明如下:
其實數組在Java中可以被看做一個對象,數組的引用和數組的實例也是分開的,所以如果希望複製整個數組的數據時,就不能簡單地使用指定語句,因爲這樣訪問的還是同一個數組。不過,雖然數組有點類似對象,但是數組畢竟不是繼承自java.lang.Object類的對象,所以就沒有clone()這個用來複制對象實例的方法。
本實例的運行結果如圖所示。
圖 實例運行結果
可以自己利用循環來進行數組的複製,例如,現有arrayA、arrayB兩個數組,要將arrayA數組中的數據複製到arrayB數組中:
for (i=0;i
二 排序數組
Arrays類中的sort()方法用於對數組進行排序,該方法的參數爲任意基本類型的數組,也可以對任意對象數組進行排序,語法如下:
Arrays.sort(a);
參數說明:
a:排序數組名稱。
排序數組
1)創建SortArray類,在main()方法中輸入以下程序關鍵代碼:
String[] s = new String[]{"abc", "ABC", "EDF", "234"};
Arrays.sort(s); //將數組s排序
System.out.println(Arrays.asList(s)); //打印數組s
代碼說明如下:
上述代碼中定義了一個字符型數組,其中包括4個元素,有大寫字母、小寫字母和數字,使用sord()方法對這個數組進行排序,參數爲數組s,排序後打印數組s,此時可以使用for循環語句對數組進行打印,Arrays類庫也爲用戶提供了更爲方便的打印形式,使用asList()方法即可,參數爲需要打印的數組名稱。
2)在Eclipse中運行上述代碼,結果如圖所示。
圖 排序數組
Java中的String排序算法是根據字典編排順序排序的,所以數字排在字母前面,大寫字母排在小寫字母前面。如果想忽略大小寫字母,將單詞放在一起排序,可以修改上述代碼,如例7.9。
下面是一個忽略字符串大小寫排序的例子。
1)創建SortArray2類,在main()方法中輸入以下程序關鍵代碼。
String[] sa=new String[]{"b","C","a","234"};
Arrays.sort(sa, new SingleCompare()); //忽略大小寫給數組sa排序
System.out.println(Arrays.asList(sa)); //打印數組sa
2)在SortArray2類中創建類SingleCompare,程序代碼如下:
public class SingleCompare implements Comparator{
public int compare(Object o1,Object o2){//重寫compare方法
String s1=(String)o1;
String s2=(String)o2;
return s1.toLowerCase().compareTo(s2.toLowerCase());
//將字符串s1、s2大寫轉化爲小寫後進行比較
}
}
代碼說明如下:
在上述代碼中實現了Comparator接口,該接口強行對某些對象進行整體排序,可以將Comparator傳遞給sort()方法,從而允許在排序上實現精確控制。Comparator有兩個方法,分別爲compare()方法和equals()方法,可以重寫compare()方法實現自己需要的比較,如上述代碼中比較兩個字符串的大小寫情況,在這裏使用了String類中的toLowerCase()方法,此方法將字符串中的大寫字母轉換爲小寫字母,將字符串從大寫字母轉換爲小寫字母后,再進行比較,然後將比較結果傳遞給sort()方法進行排序。
3)打印結果,如圖所示。
圖 不區分字母大小寫,排序數組
注意:
compare()方法返回負數、零、或正整數,分別對應於第一個參數小於、等於或大於第2個參數。
三 比較數組
Arrays類提供了equals()方法,用來比較整個數組,數組相等的條件是數組元素的個數必須相等,並且對應的位置元素也相等,這時候可以通過對每個元素使用equals()方法做比較來判斷,語法如下:
Arrays.equals(arrayA,arrayB);
參數說明:
arrayA:待比較的數組名稱。
arrayB:待比較的數組名稱。
比較數組。
1)創建ComparingArrays類,在main()方法中輸入以下程序關鍵代碼:
int[]a1={1,2,3,4,5,6,7,8,9,0};
int[]a2=new int[9];
System.out.println(Arrays.equals(a1, a2));//打印數組a1與a2的比較結果
int[]a3={1,2,3,4,5,6,7,8,9,0};
System.out.println(Arrays.equals(a1, a3));//打印數組a1與a3的比較結果
int[]a4={1,2,3,4,5,6,7,8,9,5};
System.out.println(Arrays.equals(a1, a4));//打印數組a1與a4的比較結果
代碼說明如下:
上述代碼中定義了3個數組,第一個數組直接給出了數組的值,聲明和初始化放在了一起,從筆者給出的數值可以看出,數組a1的長度爲10,而定義的第2個數組的長度爲9,所以使用Arrays.equals()方法進行比較後,結果爲false。再次定義一個與a1相同的數組a3,比較後結果爲true。這時筆者再次定義一個數組a4,數組a4與數組a1元素個數相同,元素內容不同,比較數組a1與a4結果爲false。
2)在Eclipse中運行上述代碼,運行結果如圖所示。
圖 比較數組結果
四 搜索數組
搜索數組是指從數組中查詢指定位置的元素,或者是查詢某元素在指定數組中的位置,搜索數組中的元素需要使用binarySearch()這個方法,此方法也爲Arrays類的方法。在使用binarySearch()方法之前,有一點要非常注意,就是被查找的數組必須是已經排序好的。如果找到了需要查詢的結果,binarySearch()方法返回值爲需要查找的內容在數組中的位置,如果沒有查找到要找的數據,那麼會返回一個“負數”,至於這個負數的值會是多少,就看這棵二叉樹下一個插入位置的索引值是多少了。
語法如下:
int i=binarySearch(a,”abc”);
參數說明:
a:搜索數組的名稱。
abc:需要在數組中查找的內容。
搜索數組,將某路車的各個站點集合組成一個數組,在這個數組中,通過binarySearch()方法查詢“東盛路”應該是該線路的第幾站。
1)創建SearchArray類,在main()方法中輸入以下程序關鍵代碼:
//定義表示公交線路的數組
String[] arrStr = { "長白路", "四通路", "東盛路", "吉林路", "長春大街", "延吉路" };
int location = Arrays.binarySearch(arrStr, "東盛路"); //搜索“東盛路”爲第一站地
System.out.println("查找東盛路的位置是" + location + ",arrStr[" + location + "]="
+ arrStr[location]); //輸出查詢結果
代碼說明如下:
該段代碼首先創建了String類型數組,保存線路中各站點的集合,之後通過binarySearch()方法搜索數組中“東盛路”所佔的位置。
2)在Eclipse中運行上述代碼,運行結果如圖所示。
圖 搜索數組
五 填充數組
Arrays類庫中爲用戶提供填充數組的方法爲fill()方法,雖然可以填充數組,但此方法的功能有限,只能使用同一個數值進行填充,使用此方法可以在指定位置進行數值填充。
Arrays類引用fill()方法實現數組填充,例如:
int array[]=new int[10];
Arrays.fill(array,11);
參數說明:
array:將被填充數組的名稱。
上述代碼實現將數值11填充到數組a中。
填充數組。
1)創建FillingArrays類,在main()方法中輸入以下程序關鍵代碼:
int array[] = new int[6]; //定義長度爲6的數組
System.out.println("輸出數組中的元素:");
for (int i = 0; i < 6; i++) {
Arrays.fill(array, i); //用循環元素中的值進行數組填充
//將填充後的結果輸出
System.out.print("array2[" + i + "]=" + array[i] + " ");
}
代碼說明如下:
上段代碼中首先定義int類型數組,設定數組的長度爲6。再定義一個長度爲6的循環,通過fill()方法對數組進行填充,再將填充後的結果輸出。
2)在Eclipse中運行程序,如圖所示。
圖 實例的運行結果
注意:
在向數組中填充數據時應該注意,雖然定義數組的長度爲6,但數組的下標是從0開始的,所以數組的最大下標值應該是5,此時若爲下標爲6的數組元素賦值,則會跑出數組下標越界異常。
六 傳遞數組
數組名稱實際上就是一個引用,所以傳遞數組實質上就是傳遞引用。當方法傳遞引用時,只需要在方法參數中指定引用的名稱即可。
將數組傳遞給方法,應該使用不加方括號的數組名,例如:
int array[] = new int[24]; // 聲明一個數組
modify(array); // modify方法調用
參數說明:
array:要傳遞的數組名稱。
上述代碼是在方法調用時的寫法,如果是定義一個方法,參數爲數組,則語法如下:
void modifyArray(int b[]){}
參數說明:
b:參數。
這表示modifyArray()方法正準備接收一個整型數組,名稱爲b。
傳遞數組。
1)創建PassArray類,在main()方法中輸入以下程序關鍵代碼:
int array[]={1,2,3,4,5};
for(int i=0;i<array.length;i++){
System.out.println("沒有傳值之前的數組爲:"+array[i]);
//打印沒有調用modifyArray()方法的數組值
}
modifyArray(array); //調用方法
for(int i=0;i<array.length;i++){
System.out.println("傳遞之後數組的數組爲:"+array[i]);
//打印調用modifyArray()方法後的數值
}
2)在PassArray類中定義一個modifyArray()方法,它的參數爲數組,程序代碼如下:
public static void modifyArray (int array[]){
for(int i=0;i<array.length;i++){
array[i]*=2; //將數組array中的每個元素都乘以2
}
}
代碼說明如下:
首先創建一個方法modifyArray(),參數爲int型數組,在該方法內使用for循環語句將傳遞過來的數組中每一個數乘以2。
在主函數中定義一個數組,打印沒有改變之前的數組的值。
調用modifyArray()方法,由於modifyArray()方法爲static的,所以在主函數中可以直接調用。
改變數組值後,打印數組。
3)在Eclipse中運行結果如圖所示。
圖 向方法傳遞數組