数组初始化
定义数组语法格式
定义数组有两种方式,如下两种格式是等价的:
int[] a1;
int a1[];
int a1[];
注:在C/C++中,不支持第一种格式。但是,推荐使用这种方式,因为这样似乎更合理,声明了一个整型数组类型的变量,名字为a1。
数组大小
JAVA中,数组不允许在方括号中指定维度(即在方括号中指定数字来限制数组大小)。那么,如何限定数组的大小呢?有以下两种方式:
●使用初始化列表
int[] array = {1, 2, 3, 4, 5, };
注:初始化列表的最后一个逗号是可选的(这一特性使维护长列表变得更容易)。
对象数组
基本类型数组就是指保存的数据类型为基本类型的数组,如int、long、double等。
对象数组是指保存的数据类型为非基本类型的数组,如一些内置类或自定义类等。
对象数组和基本类型数组在使用上几乎是相同的;唯一区别就是对象数组保存的是引用,而基本类型数组直接保存的是基本类型的值。
如下代码中,声明一个自定义类apple类型的数组。如果在数组的各元素还未初始化时就引用这些元素,运行时会报错(代码注释处)。
class Apple {
}
Apple[] apples;
apples = new Apple[3];
// System.out.println(apples[0].toString());
for ( int i = 0; i < 3; i++)
apples[i] = new Apple();
System.out.println(apples[0].toString());
}
Apple[] apples;
apples = new Apple[3];
// System.out.println(apples[0].toString());
for ( int i = 0; i < 3; i++)
apples[i] = new Apple();
System.out.println(apples[0].toString());
使用new int[]
int[] array;
array = new int[5]; // 分配一个含有5个int型元素大小的数组,所有元素自动初始化为0
array = new int[5]; // 分配一个含有5个int型元素大小的数组,所有元素自动初始化为0
数组赋值
不同于C/C++,在JAVA中,允许将一个数组整体赋值给另一个数组。如下:
int[] array = {1, 2, 3, 4, 5,};
int[] array2;
array2 = array;
for ( int i = 0; i < array2.length; i++) {
array2[i] = array2[i] + 1; // 给数组元素赋值
}
for ( int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
int[] array2;
array2 = array;
for ( int i = 0; i < array2.length; i++) {
array2[i] = array2[i] + 1; // 给数组元素赋值
}
for ( int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
运行结果:
2 3 4 5 6
这里,其实是复制了一个引用。当array的引用复制给array2后,再对array2进行修改实际上等同于修改array。所以两个数组的值同时发生改变。
注:和C/C++一样,JAVA数组计数也是从第0个元素开始,所以下标最大值为length-1。如果超出边界,编译器会提示错误。
数组的特点
数组是一种效率最高的存储和随机访问对象引用序列的方式。
如果和现在广泛使用的容器相比较,它的优点在于访问效率比较高,缺点在于大小固定,没有容器的大小伸缩性。
Arrays实用功能
在 java.util.Arrays 类中提供了一套用于数组的static实用方法。以下介绍几个常用的基本方法:
方法名 | 作用 |
equals | 比较两个数组是否相等,deepEquals用于多维数组 |
fill | 用同一个值填充各个位置。 |
sort | 对数组排序 |
binarySearch | 用于已经排序的数组中查找元素 |
toString | 产生数组的String表示 |
hashCode | 产生数组的散列码 |