黑馬程序員——JAVA基礎---操作數組

——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中運行結果如圖所示。
這裏寫圖片描述
圖 向方法傳遞數組

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章