數組對於每個程式語言來說都是重要的資料結構之一,當然不同語言對數組的實作及處理也不盡相同。
Java 語言中提供的陣列是用來儲存固定大小的同類型元素。
你可以宣告一個數組變量,如numbers[100] 來取代直接宣告100 個獨立變數number0,number1,....,number99。
本教學將為大家介紹Java陣列的宣告、建立和初始化,並給出其對應的程式碼。
首先必須宣告數組變量,才能在程式中使用數組。下面是聲明數組變數的語法:
dataType[]arrayRefVar;//首选的方法或dataTypearrayRefVar[];//效果相同,但不是首选方法
注意:建議使用dataType[] arrayRefVar 的聲明風格聲明數組變數。 dataType arrayRefVar[] 風格是來自C/C++ 語言,在Java中採用是為了讓C/C++ 程式設計師能夠快速理解java 語言。
以下是這兩種語法的程式碼範例:
double[]myList;//首选的方法或doublemyList[];//效果相同,但不是首选方法
Java 語言使用new運算元來建立數組,語法如下:
arrayRefVar=newdataType[arraySize];
上面的語法語句做了兩件事:
一、使用dataType[arraySize] 建立了一個陣列。
二、把新建立的陣列的引用賦值給變數arrayRefVar。
數組變數的聲明,和建立數組可以用一條語句完成,如下所示:
dataType[]arrayRefVar=newdataType[arraySize];
另外,你也可以使用如下的方式來建立陣列。
dataType[]arrayRefVar={value0,value1,...,valuek};
數組的元素是透過索引存取的。陣列索引從0開始,所以索引值從0 到arrayRefVar.length-1。
那麼當數組開闢空間之後,就可以採取如下的方式的操作:
範例: 定義一個int型數組
public class ArrayDemo { public static void main(String args[]) { int data[] = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
數組本身除了聲明並開闢空間之外還有另外一種開闢模式。
範例:採用逐步的模式開闢數組空間
public class ArrayDemo { public static void main(String args[]) { int data[] = null; data = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
但是千萬要記住,數組屬於引用資料類型,所以在數組使用之前一定要開闢空間(實例化),如果使用了沒有開闢空間的數組,則一定會出現NullPointerException
異常資訊:
public class ArrayDemo { public static void main(String args[]) { int data[] = null; System.out.println(data[x]); } }
這原則和之前講解的對像是完全相同的。
數組在開發之中一定會使用,但是像上面的操作很少。在往後的實際開發之中,會更多的使用陣列概念,而直接使用,大部分情況下都只是做一個for迴圈輸出。
數組的元素類型和數組的大小都是確定的,所以當處理數組元素時候,我們通常使用基本循環或foreach 循環。
這個實例完整地展示如何建立、初始化和操縱陣列:
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(inti=0;i<myList.length;i++){ System.out.println(myList[i]+""); } //计算所有元素的总和doubletotal=0; for(inti=0;i<myList.length;i++){ total+=myList[i]; } System.out.println("Totalis"+total); //查找最大元素doublemax=myList[0]; for(inti=1;i<myList.length;i++){ if(myList[i]>max)max=myList[i]; } System.out.println("Maxis"+max); } }
以上實例編譯運行結果如下:
1.9 2.9 3.4 3.5 Totalis11.7 Maxis3.5
JDK 1.5 引進了一種新的循環類型,稱為foreach 循環或加強型循環,它能在不使用下標的情況下遍歷數組。
文法格式如下:
for(type element: array){ System.out.println(element); }
這個實例用來顯示數組myList 中的所有元素:
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(doubleelement:myList){ System.out.println(element); } } }
以上實例編譯運行結果如下:
1.9 2.9 3.4 3.5
數組可以作為參數傳遞給方法。例如,下面的例子就是一個列印int 陣列中元素的方法。
publicstaticvoidprintArray(int[]array){ for(inti=0;i<array.length;i++){ System.out.print(array[i]+""); } }
下面範例呼叫printArray 方法印出3,1,2,6,4和2:
printArray(newint[]{3,1,2,6,4,2});
publicstaticint[]reverse(int[]list){ int[]result=newint[list.length]; for(inti=0,j=result.length-1;i<list.length;i++,j--){ result[j]=list[i]; } returnresult; }
以上實例中result數組作為函數的回傳值。
java.util.Arrays 類別能方便地操作數組,它提供的所有方法都是靜態的。具有以下功能:
給數組賦值:透過fill 方法。
對數組排序:透過sort 方法,按升序。
比較數組:透過equals 方法比較數組中元素值是否相等。
尋找數組元素:透過binarySearch 方法能對排序好的陣列進行二分查找法操作。
具體說明請看下表:
序號 | 方法和說明 |
---|---|
1 | public static int binarySearch(Object[] a, Object key)用二分查找演算法在給定陣列中搜尋給定值的物件(Byte,Int,double等)。數組在呼叫前必須排序好的。如果查找值包含在陣列中,則傳回搜尋鍵的索引;否則傳回(-(插入點) - 1)。 |
2 | public static boolean equals(long[] a, long[] a2)如果兩個指定的long 型陣列彼此相等,則傳回true。如果兩個數組包含相同數量的元素,並且兩個數組中的所有相應元素對都是相等的,則認為這兩個數組是相等的。換句話說,如果兩個陣列以相同順序包含相同的元素,則兩個陣列是相等的。同樣的方法適用於所有的其他基本資料類型(Byte,short,Int等)。 |
3 | public static void fill(int[] a, int val)將指定的int 值指派給指定int 型陣列指定範圍中的每個元素。同樣的方法適用於所有的其他基本資料類型(Byte,short,Int等)。 |
4 | public static void sort(Object[] a)將指定物件陣列依其元素的自然順序進行升序排列。同樣的方法適用於所有的其他基本資料類型(Byte,short,Int等)。 |