程序员面试必考题(二十七)---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[ ][ ] = new type [ arrleng1 ][ ];

arrayN [0] = new type [arrleng2];

arrayN [1] = new type [arrleng2];

......

arrayN [arrleng1 - 1] = new type [arrleng2];


该说明创建的数组第一维大小是arrleng1,第二维大小为arrleng2。它创建的是一个矩阵数组,即第二维的大小一致。当然也可以创建第二维大小不一致的数组。例如:


int twoDim[ ][ ] = new int [ 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[] = new int[6];

elements = new int[10];


【答  案】正确。第一行说明了一维整型数组elements,它含有6个元素。第二行实际上是将数组引用指向了一个新的数组,含有10个整型数组。


【解  析】

数组创建后就不能改变它的大小,但是可以使用同一个引用变量指向一个全新的数组。实际上,第一个数组实际上丢失了,除非还有其他的引用指向它。

 

例3. 执行下列程序后,数组hold的内容是什么?请解释。


class ArrayTest

{   public static 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。

《横扫offer---程序员招聘真题详解700题》,开点工作室著,清华大学出版社出版,天猫、京东等各大网上书店及实体书店均已开始发售。


全部评论
👏👏
点赞 回复 分享
发布于 2016-09-23 11:09

相关推荐

迷茫的大四🐶:💐孝子启动失败,改为启动咏鹅
点赞 评论 收藏
分享
🐭🐭不想面试啦�...:哈哈哈哈,是hc稀缺是吧。一边稀缺,一边后端简历多到捞不出来
点赞 评论 收藏
分享
评论
点赞
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务