- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 2025版《煤矿安全规程》宣贯培训课件.pptx VIP
- 2025年中国石油数智研究院秋季高校毕业生招聘60人笔试上岸历年真考点题库附带答案详解.doc
- 变电所改造工程施工方案(3篇).docx VIP
- 欧洲标准化委员化BS EN 10283 - 2010.pdf VIP
- 2025年中国石油数智研究院招聘笔试备考题库(带答案详解).pdf
- 期末模拟质量检测卷-2024-2025学年统编版语文三年级上册.docx VIP
- 山东省建筑施工企业安全生产管理人员安全生产知识考试题库(含答案).pdf VIP
- 城市规划设计计费(2004)中规协秘字第022号.pdf VIP
- 数据库原理及应用教程(MySQL版)全套教学课件.pptx VIP
- 关爱困境儿童让爱守护成长PPT模板.pptx VIP
文档评论(0)