数组是用共有名称引用相同类型变量的集合.在Java中,虽然最常用的数组是一维数组,但是数组也可以有多维.数组用途广泛,因为他们提供了一种把相关变量集合在一起的便利方法.例如,可以使用数组存储一个月当中每天的最高温度,股票价格的平均值或是收藏程序设计图书的清单.
数组的主要优势在于用一种可以轻松操作数据的方法把数据组织了起来.例如,如果有一个存储家庭各类收入情况的数组,那么通过遍历数组,可以轻松的计算出收入平均数.而且,按照这种方法组织数据的数组可以方便的进行排序操作.
尽管Java中数组与其他程序设计语言的数组用法相似,但是他还有一个特殊的属性:Java是把他们做为对象来实现,可以获得许多优势,优势之一就是使无用的数组可以被垃圾回收器回收.
一维数组
一维数组是相关变量的列表.在程序设计中,这样的列表是很常见的.例如,可以用一个一维数组存储某一网络活动用户的统计数量,可以用另一个数组存储一支棒球队目前的平均击球数.
使用下面的基本形式可以声明一维数组:
type array-name[] = new type[size];
这里,type声明了数组的元素类型(元素类型常被称为基本类型).元素类型确定了数组包含的每个元素的数据类型.size确定了数组中存储的元素数量.因为数组是做为对象来实现的,所以创建数组需要两个步骤.size确定了数组中存储的元素数量.因为数组是做为对象来实现的,所以创建数组需要两个步骤.第一,要声明一个数组引用变量.第二,为数组分配内存,并将对内存的引用赋给数组变量.因此,Java中的所有数组都是使用new运算符来动态分配.
下面的示例创建了一个有10个元素的int数组,并将其与一个名为sample的数组引用变量建立链接:
int sample[] = new int[10];
这个声明与对象声明相似.sample变量存储了一个由new分配的内存引用.该内存的容量足以存储10个int类型的元素.与对象一样,可以把前面的声明分为两部分,例如:
int sample[]; sample = new int[10];
这里,第一次创建sample时,他没有引用实际对象.只有第二条语句执行后,sample才与数组链接.
数组中的单个元素是通过索引来访问的.索引(index)描述了元素在数组中的位置.在Java中,所有的数组都以0作为第一个元素的索引.因为sample有10个元素,所以他的索引值就是从0到9.要索引数组,只需使用方括号包含指定的元素索引值即可.因此,sample的第一个元素是sample[0],最后一个元素是sample[9].例如,下面的程序把从0到9的数字存储到sample中:
public class test2 { // @param args public static void main(String args[]) { int sample[] = new int[10]; int i; for(i=0;i<10;i++) sample[i] = i; for(i=0;i<10;i++) System.out.println("this is sample["+i+"] : "+sample[i]); } }
输出:
this is sample[0] : 0 this is sample[1] : 1 this is sample[2] : 2 this is sample[3] : 3 this is sample[4] : 4 this is sample[5] : 5 this is sample[6] : 6 this is sample[7] : 7 this is sample[8] : 8 this is sample[9] : 9
从概念上看,sample数组如图所示:
在程序设计中数组是很常见的,因为可以使用它们来轻松处理大量的相关变量.例如,下面的程序使用for循环寻找存储在nums数组中的最小值和最大值:
public static void main(String args[]) { int sample[] = new int[10]; int i,min,max; for(i=0;i<10;i++) sample[i] = i; min = max = sample[0]; for(i=1;i<10;i++) { if(sample[i] < min) min = sample[i]; if(sample[i] > max) max = sample[i]; } System.out.println("min and max:"+min+" "+max); }
输出:
min and max:0 9
前面的程序使用10条单独的复制语句手动向sample赋值,尽管这是完全正确的,但是还有更简单的方法来完成这项工作.创建数组时,就可以初始化数组.初始化一维数组的基本形式如下所示:
type array-name[] = {val1,val2,val3...};
这里,使用val1到valN指定了初始值,他们是从左到右按照索引顺序赋值的,Java自动分配一个足够大的数组来存储指定的初始值.这里没有必要显式使用new运算符.例如下面有一种更好的方法来编写minmax程序
public static void main(String args[]) { int sample[] = {0,1,2,3,4,5,6,7,8,9}; int i,min,max; min = max = sample[0]; for(i=1;i<10;i++) { if(sample[i] < min) min = sample[i]; if(sample[i] > max) max = sample[i]; } System.out.println("min and max:"+min+" "+max); }
在Java中,数组界限是必须严格遵守的,超出数组范围就会产生运行错误.