位置:首頁 > Java技術 > Java基礎教程 > Java數組

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。

Java Array

處理數組:

當處理數組元素,經常使用的是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.)