Java数组面试题及答案(实战版).docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Java数组面试题及答案(实战版)

1.实际开发中,定义并初始化一个存储“用户年龄”的int数组,有哪几种常用写法?如果只声明不初始化,直接访问数组元素会出什么问题?

答案:

常用写法有3种,关键是要区分“声明”和“初始化”的区别:

①声明时直接赋值(最常用):

int[]userAges={18,22,30};//长度由赋值元素个数自动确定,不能先写长度再这么赋值(比如int[3]userAges={1,2,3}会报错)

②先指定长度,再逐个赋值:

int[]userAges=newint[3];

userAges[0]=18;

userAges[1]=22;

userAges[2]=30;//没赋值的元素会默认填0(int数组默认值)

③用new关键字+初始化块(少见,但面试可能问):

int[]userAges=newint[]{18,22,30};//这里new后面的[]不能写长度,否则和元素个数冲突

注意点:如果只声明不初始化(比如int[]userAges;),直接访问userAges[0]会报NullPointerException,因为此时数组变量只是个“空引用”,没指向实际内存空间。

2.我把数组A赋值给数组B后,修改B的元素,A的元素会跟着变吗?举个例子说明为什么?

答案:

会变!因为数组是引用类型,赋值传递的是“内存地址”,不是数组本身的拷贝。

比如这段代码:

int[]arrA={10,20};

int[]arrB=arrA;//arrB和arrA指向同一块内存

arrB[0]=99;//修改arrB,其实是改同一块内存里的值

System.out.println(arrA[0]);//输出99,arrA的元素也变了

如果想让A和B独立,需要手动拷贝数组(比如用System.arraycopy或Arrays.copyOf),而不是直接赋值。

3.实际开发中怎么给数组“扩容”?比如原有数组存满了,要加新元素,怎么做?

答案:

Java数组长度一旦初始化就固定,不能直接“扩”,只能用“新建数组+拷贝元素”的方式实现:

常用两种方法,以int数组为例:

①用Arrays.copyOf(简单,推荐):

int[]oldArr={1,2,3};

//新建一个长度为5的数组,把oldArr的元素拷贝过去,空位置填默认值0

int[]newArr=Arrays.copyOf(oldArr,5);

newArr[3]=4;//加新元素

newArr[4]=5;

②用System.arraycopy(效率高,底层常用):

int[]oldArr={1,2,3};

int[]newArr=newint[5];

//参数:源数组、源起始位置、目标数组、目标起始位置、拷贝长度

System.arraycopy(oldArr,0,newArr,0,oldArr.length);

newArr[3]=4;

newArr[4]=5;

(PS:ArrayList的动态扩容,底层就是这么实现的,只不过它帮我们封装了这个过程)

4.怎么判断一个数组里有没有某个元素?比如判断int数组里有没有“20”,有哪些方法?

答案:

分“无序数组”和“有序数组”两种情况,方法不一样:

①无序数组(最常用,不管数组是否排序):

直接遍历判断,或者用Arrays.asList转集合(注意基本类型数组转集合的坑):

int[]nums={15,20,25};

//方法1:遍历(简单直观)

booleanhas20=false;

for(intnum:nums){

if(num==20){

has20=true;

break;

}

}

//方法2:转集合(注意:int[]转List会变成Listint[],要先转Integer[])

Integer[]numObjArr=Arrays.stream(nums).boxed().toArray(Integer[]::new);

booleanhas20=Arrays.asList(numObjArr).contains(20);

②有序数组(如果数组已经排好序,用二分查找效率更高):

int[]sortedNums={15,20,25};//必须是有序的

intindex=Arra

文档评论(0)

151****9429 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档