程序员面试题——Java中数组的基本概念
本文将通过四个例题来讲解Java中有关数组的基本知识,供读者学习和复习:
例1. 正确的数组定义是( )。
A.intintArray [][] = new int [10,10];
B.intintArray [10][10] = new int[][];
C.intintArray [][] = new int [ ][10];
D.int[]intArray [] = new int[10][];
【答 案】D
【解 析】以二维数组为例,二维数组的定义格式如下:
type arrayName[ ][ ];
这个形式还可以有如下的变形:
type[ ] arrayName [ ];
type[ ][ ] arrayName;
对二维数组进行动态初始化时,有两种分配内存空间的方法。
第一种方法为直接为每一维分配空间,如:
type arrayName[ ][ ] =new type[arraylength1][arraylength2]
第二种方法中,多维数组可以从最高维起(而且必须从最高维开始),分别为每一维分配内存。创建二维数组的一般格式为:
type arrayN[ ][ ] = newtype [ arrleng1 ][ ];
arrayN [0] = new type[arrleng2];
arrayN [1] = new type[arrleng2];
......
arrayN [arrleng1 - 1] =new type [arrleng2];
该说明创建的数组第一维大小是arrleng1,第二维大小为arrleng2。它创建的是一个矩阵数组,即第二维的大小一致。当然也可以创建第二维大小不一致的数组。例如:
int twoDim[ ][ ] = newint [ 4 ][ ];
twoDim[0] = new int[2];
twoDim[1] = new int[4];
twoDim[2] = new int[6];
twoDim[3] = new int[8];
twoDim数组为4行,每行的元素个数分别为2,4,6,8个,各不相同。数组形式如下:
X X
X X X X
X X X X X X
X X X X X X X X
该数组各维的长度分别是:
twoDim.length = 4
twoDim[0].length = 2
twoDim[1].length = 4
twoDim[2].length = 6
twoDim[3].length = 8
选项A中,等号右侧维数的说明格式是错误的,应该修改为new int [10][10]。
选项B中,属于静态数组说明方式。但在Java语言中不允许静态说明数组。也就是说,等号左侧不能出现各维的大小。
选项C中,说明各维大小的次序是错误的。多维数组说明中,如果不是将所有的维数都说明的话,应该依从高到低的次序依次来说明。
选项D是正确的。
例2. 下列说明是否正确?请解释。
int elements[] = newint[6];
elements = new int[10];
【答 案】正确。第一行说明了一维整型数组elements,它含有6个元素。第二行实际上是将数组引用指向了一个新的数组,含有10个整型数组。
【解 析】数组创建后就不能改变它的大小,但是可以使用同一个引用变量指向一个全新的数组。实际上,第一个数组实际上丢失了,除非还有其他的引用指向它。
例3. 执行下列程序后,数组hold的内容是什么?请解释。
class ArrayTest
{ publicstatic voidmain(String args[])
{ int elements[] = { 1, 2, 3, 4, 5, 6 };
int hold[] = {10, 9, 8,7, 6, 5, 4, 3, 2, 1 };
System.arraycopy(elements,0, hold, 0, elements.length);
}
}
【答 案】数组hold的内容为:1,2,3,4,5,6,4,3,2,1。
【解 析】Java在System类中提供了一个特殊的方法arraycopy(),它实现数组之间的拷贝。
elements是一个含6个int型数的数组,hold含有10个int型数。最后一个可执行语句(arraycopy方法)是将elements中第1个(下标为0)到第elements.length个元素依次放到hold中下标从0开始的各位置,即第1个到第6个位置。执行完毕,数组hold的内容为:1,2,3,4,5,6,4,3,2,1。
在本例中,数组elements和hold作为方法arraycopy的参数使用。当数组作为函数参数时,是将数组引用传给方法,函数中对数组内容的任何改变都将影响至函数外。
例4. 设数组ages的说明为:int ages[4][7],则ages.length的值是()。
A.4
B.7
C.28
D.不确定
【答 案】A
【解 析】在Java中,数组下标从0开始,数组中的元素个数length是数组类中唯一的数据成员变量。使用new创建数组时系统自动给length赋值。数组一旦创建完毕,其大小就固定下来。
与一维数组的长度不同,多维数组的length属性只返回第一维的长度。所以ages.length的值是4,而不是28或7。
网友评论