Java-数组


Java提供了一种数据结构,即数组,该数组存储一个固定大小的相同类型元素的顺序集合。

数组用于存储相同类型数据的集合。

无需声明单个变量(例如,number0,number1,...和number99),而是声明一个数组变量(例如,numbers),并使用numbers [0],numbers [1]和...,numbers [99]来访问各个变量。

声明数组变量


要在程序中使用数组,必须声明一个变量以引用该数组,并且必须指定该变量可以引用的数组的类型。

这是声明数组变量的语法:

dataType [] arrayRefVar; //首选方式。
// 或者
dataType arrayRefVar []; //有效,但不是首选方式。

注意:dataType [] arrayRefVar是首选方式。 dataType arrayRefVar []方式来自C / C ++语言,并且在Java中被采用来容纳C / C ++程序员。

以下代码片段是此语法的示例:

double [] myList; //首选方式。
// 或者
double myList []; //有效,但不是首选方式。

创建数组


你可以使用具有以下语法的new运算符来创建数组:

arrayRefVar = new dataType [arraySize];

上面的声明做了两件事:

  • 它使用新的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包含十个double值,索引从0到9。

处理数组


在处理数组元素时,我们经常使用for循环或foreach循环,因为数组中的所有元素都是相同的类型,并且数组的大小是已知的。

这是一个完整的示例,显示了如何创建,初始化和处理数组:

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};

      // 打印所有数组元素
      for (int i = 0; i < myList.length; i++) {
         System.out.println(myList[i] + " ");
      }
     
      // 对所有元素求和
      double total = 0;
      for (int i = 0; i < myList.length; i++) {
         total += myList[i];
      }
      System.out.println("Total is " + total);
      
      // 找到最大的元素
      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循环


JDK5 引入了一个新的for循环,称为foreach循环或增强的for循环,它使你能够顺序遍历整个数组,而无需使用索引变量。

以下代码显示数组myList中的所有元素:

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};

      // 打印所有数组元素
      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;
}

数组类


java.util.Arrays类包含各种静态方法,用于对数组进行排序和搜索,比较数组以及填充数组元素。这些方法对于所有原始类型都是重载的。

方法描述
public static int binarySearch(Object[] a, Object key)使用二进制搜索算法在指定的对象数组(字节,整数,双精度数等)中搜索指定的值。在进行此调用之前,必须对数组进行排序。如果包含在列表中,则返回搜索关键字的索引。否则,返回(–(插入点+ 1))。
public static boolean equals(long[] a, long[] a2)如果两个指定的long数组彼此相等,则返回true。如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则认为两个数组相等。如果两个数组相等,则返回true。所有其他原始数据类型(byte,short,int等)都可以使用相同的方法。
public static void fill(int[] a, int val)将指定的int值分配给指定的int数组的每个元素。所有其他原始数据类型(byte,short,int等)都可以使用相同的方法。
public static void sort(Object[] a)根据其元素的自然顺序,将指定的对象数组按升序排序。所有其他原始数据类型(byte,short,int等)都可以使用相同的方法。