前言
Java提供了数组这种数据结构,用来存储固定大小的相同类型的元素的顺序集合。数组是数据的集合,通常情况下,可以认为数组是存储相同类型变量的集合。
除了可以声明独立的变量,例如number0,number1,…,number99,我们还可以声明一个变量数组然后用numbers[0],numbers[1],…,numbers[99]来表示变量。
本节教程我们一起来学习一下如何声明数组变量,创建数组,以及使用索引来处理数组。
声明数组变量
要想在程序里使用数组,我们必须声明一个变量来引用数组,并且指定变量可以引用的数组的类型。下面是声明数组变量的语法。
语法
dataType[] arrayRefVar; //首选的方式
or
dataType arrayRefVar[]; //可行,但不是首选
注意:声明数组变量时推荐使用“dataType[] arrayRefVar”这种写法,"dataType arrayRefVar[]"这种写法是C或C++语言里常用的,这种写法在Java中被支持是为了照顾从C/C++语言转到Java的程序员。
应用举例
下面是声明数组变量的一个例子。
double[] myList; //首选的方式
double myList[]; //可行,但不是首选
创建数组
我们可以使用new关键字来创建数组。
语法
arrayRefVar = new dataType[arraySize];
上面的语句做了两件事情:
- 使用“new dataType[arraySize]”创建了一个数组
- 将新创建数组的引用分配给了变量arrayRefVar
声明一个变量,创建一个数组,以及分配数组的引用给变量,这3个步骤可以使用1个语句完成:
dataType[] arrayRefVar = new dataType[arraySize];
或者,我们还可以按下面的方式来创建数组:
dataType[] arrayRefVar = {value0, value1, ..., valuek};
数组里的元素通过索引(index)来访问。索引从0起始,也就是,从0起始到数组长度-1(arrayRefVar.length-1)。
应用举例
下面的语句声明了一个数组变量myList,创建了一个包含10个double类型元素的数组,并将myList变量指向数组的引用:
double[] myList = new double[10];
下图表示的是myList变量的构成,可以看出myList包含了10个double类型的值,其索引为从0到9。
处理数组
当处理数组元素时,通常使用的是for循环或增强for循环,这是因为数组里的元素都是同一种类型,并且数组的大小是已知的。
程序举例
下面程序里展示了如何创建、初始化和处理数组:
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
使用增强for循环遍历数组
JDK 1.5之后开始支持一种新的for循环:增强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
将数组作为参数传入方法
正如可以给方法传入基本数据类型的参数一样,我们也可以将数组作为参数传入方法。例如,下面程序中printArray()方法的参数就是一个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});
方法中返回数组
Java中的方法同样可以返回一个数组。例如,下面程序中的reverse()方法返回的是一个经过逆序排序的数组:
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等)中搜索指定的值。 在进行此调用之前,必须对数组进行排序。 如果包含在列表中,则返回搜索关键字的索引。 |
2 | public static boolean equals(long[] a, long[] a2) 如果两个指定的long数组彼此相等,则返回true。 |
3 | public static void fill(int[] a, int val) 将指定的int值分配给指定的int数组的每个元素。 |
4 | public static void sort(Object[] a) 根据对象的自然顺序,将指定的对象数组按升序排序。 |
关注公众号「小白轻松学编程」
更多交流,欢迎微信搜索并关注公众号「 小白轻松学编程」!
博客里所有教程会第一时间在公众号上更新哟,扫码关注一下吧~