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 数组图示
处理数组
在处理数组元素时,我们经常使用 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 , 等) 也可以使用相同的方法。 |