Java 提供了一种名为数组的数据结构,它存储固定大小的相同数据类型的元素序列。数组用来存储一组数据,但往往更有用的是将数组视为一组相同类型的变量集合。
与其声明单个变量,如 number0, number1, ..., number99,不如声明一个数组变量如 numbers 并使用 numbers[0], numbers[1], ..., numbers[99] 来表示单个变量。
本教程介绍了如何声明数组变量、创建数组以及使用索引变量处理数组。
声明数组变量
要在程序中使用数组,你必须声明一个引用数组的变量,并且必须指定该变量可以引用的数组类型。以下是声明数组变量的语法:
语法
dataType[] arrayRefVar;
or
dataType arrayRefVar[];
注意:dataType[] arrayRefVar 这种风格是首选的。而 dataType arrayRefVar[] 这种风格来自于 C/C++ 语言,并被 Java 采纳以适应 C/C++ 程序员的需求。
示例
以下是这种语法的例子:
double[] myList;
or
double myList[];
创建数组
你可以使用 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,创建了一个包含 10 个元素的 double 类型数组,并将其引用赋给 myList:
double[] myList = new double[10];
下图代表数组 myList。这里 myList 包含十个 double 值,索引从 0 到 9。
Java 数组图示

Java 数组
处理数组
在处理数组元素时,我们经常使用 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 循环处理数组
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};
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 类包含各种静态方法,用于排序和搜索数组、比较数组以及填充数组元素。这些方法针对所有基本类型进行了重载。
数组方法列表
| 序号 |
方法 & 描述 |
| 1 |
public static int binarySearch(Object[] a, Object key) |
| |
使用二分查找算法在指定的 Object 数组 (Byte, Int, double 等) 中搜索指定的值。数组必须在调用之前进行排序。如果搜索键包含在列表中,则返回搜索键的索引;否则,返回 (- (插入点 + 1))。 |
| 2 |
public static boolean equals(long[] a, long[] a2) |
| |
如果两个指定的长整型数组相等,则返回 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, 等) 也可以使用相同的方法。 |