Java數組
Java提供了一個數據結構:數組,用於存儲相同類型的元素的一個固定大小的連續集合。數組是用於存儲數據的集合,但它往往是更有助於認為數組為相同類型的變量的集合。
相反聲明單個變量,如number0, number1, ... number99, ,聲明一個數組變量,如數字和使用numbers[0], numbers[1] ..., numbers[99] 來表示各個變量。
在節將介紹如何使用索引變量聲明數組變量,創建數組,並處理數組。
聲明數組變量:
要使用一個程序的數組,必須聲明一個變量來引用數組,必須指定數組的變量可以引用的類型。下麵是語法來聲明一個數組變量:
dataType[] arrayRefVar; // preferred way. or dataType arrayRefVar[]; // works but not preferred way.
注:風格 dataType[] arrayRefVar 是首選的。風格 dataType arrayRefVar[] 來自於C/C++語言,並采用了在Java中容納C/C++編程。
例子:
下麵的代碼片段是這種語法的例子:
double[] myList; // preferred way. or double myList[]; // works but not preferred way.
創建數組:
可以通過使用new運算符使用以下語法創建一個數組:
arrayRefVar = new dataType[arraySize];
上麵的語句做了兩件事:
-
它創建一個數組使用 new dataType[arraySize];
-
它分配新創建的數組變量 arrayRefVar 的引用。
聲明數組變量,建立一個數組,並分配陣列的參考變量可以在一個語句中被組合,如下所示:
dataType[] arrayRefVar = new dataType[arraySize];
另外,可以創建數組,如下所示:
dataType[] arrayRefVar = {value0, value1, ..., valuek};
數組元素通過索引訪問。數組的下標是從0開始的,也就是說,它們從0開始到 arrayRefVar.length-1.
例子:
下麵的語句聲明一個數組變量 myList,創建 double 類型10個元素的數組,並把它的引用到 myList :
double[] myList = new double[10];
以下圖片代表數組 myList。在這裡,myList 有10個 double 值,索引是從0到9。
處理數組:
當處理數組元素,經常使用的是loop循環或foreach循環,因為所有的對數組中的元素是相同類型和數組的大小是已知的。
例子:
下麵是一個演示如何創建,初始化和處理數組的完整例子:
public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; // Print all the array elements for (int i = 0; i < myList.length; i++) { System.out.println(myList[i] + " "); } // Summing all elements double total = 0; for (int i = 0; i < myList.length; i++) { total += myList[i]; } System.out.println("Total is " + total); // Finding the largest element double max = myList[0]; for (int i = 1; i < myList.length; i++) { if (myList[i] > max) max = myList[i]; } System.out.println("Max is " + max); } }
這將產生以下結果:
1.9 2.9 3.4 3.5 Total is 11.7 Max is 3.5
foreach循環:
JDK 1.5 引入了一個新的 for循環被稱為foreach循環或增強的for循環,它無需使用一個索引變量來遍曆數組的順序完成。
例子:
下麵的代碼顯示遍曆數組myList 中的所有元素:
public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; // Print all the array elements for (double element: myList) { System.out.println(element); } } }
這將產生以下結果:
1.9 2.9 3.4 3.5
將數組傳遞給方法:
正如傳遞基本類型值的方法,也可以將數組傳遞給方法。例如,下麵的方法顯示在一個int數組中的元素:
public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } }
可以通過傳遞數組調用它。例如,下麵的語句調用方法PrintArray 顯示3,1,2,6,4,2:
printArray(new int[]{3, 1, 2, 6, 4, 2});
返回一個數組的一個方法:
方法也可以返回一個數組。例如,下麵所示的方法返回一個數組,它是另一個數組的反轉:
public static int[] reverse(int[] list) { int[] result = new int[list.length]; for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; } return result; }
Arrays 類:
java.util.Arrays中的類包含各種靜態方法用於排序和搜索數組,數組的比較和填充數組元素。這些方法被重載的所有基本類型。
SN | 方法和描述 |
---|---|
1 |
public static int binarySearch(Object[] a, Object key) 搜索對象的指定數組(字節,整數,雙精度等)使用二進製搜索算法來指定值。該數組必須在進行此調用之前對分類。這將返回索引搜索關鍵字,如果它被包含在列表 (-(insertion point + 1). |
2 |
public static boolean equals(long[] a, long[] a2) 如果多頭的兩個指定數組彼此相等返回true。兩個數組認為是相等判定方法:如果兩個數組包含相同的元素數目,並在兩個數組元素的所有相應對相等。如果兩個數組相等,返回true。同樣的方法可以用於所有其它的原始數據類型 (Byte, short, Int, etc.) |
3 |
public static void fill(int[] a, int val) 將指定的int值到指定的int型數組中的每個元素。同樣的方法可以用於所有其它的原始數據類型(Byte, short, Int etc.) |
4 |
public static void sort(Object[] a) 排序對象指定的數組升序排列,根據其元素的自然順序。同樣的方法可以用於所有其它的原始數據類型( Byte, short, Int, etc.) |