版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java集合高频笔试题及详细答案本次试题为企业面试、校招高频真题,涵盖List、Set、Map、集合底层原理、并发集合、集合工具类等核心考点,题型包含选择题、填空题、简答题、编程题,适配初级、中级Java开发面试笔试,答案贴合实际开发场景,通俗易懂。一、单项选择题(10题)1.以下关于ArrayList和LinkedList的说法,正确的是()A.ArrayList查询慢、增删快B.LinkedList查询慢、增删快C.两者增删查询效率一致D.LinkedList底层是数组结构答案:B解析:ArrayList底层基于动态数组实现,数组的特性是随机访问效率极高,根据下标可直接定位元素,但中间增删元素需要移动大量元素,效率低;LinkedList底层是双向链表,无下标索引,查询需要从头节点遍历,效率低,增删仅需修改节点指针指向,无需移动元素,效率高。2.HashMap的底层数据结构在JDK1.8之后是()A.数组+单向链表B.数组+双向链表C.数组+单向链表+红黑树D.纯红黑树答案:C解析:JDK1.7及以前,HashMap底层是数组+单向链表;JDK1.8做了优化,当链表长度大于等于8且数组容量大于等于64时,链表会转换为红黑树,降低查询时间复杂度,提升性能。3.以下集合中,线程安全的是()A.ArrayListB.HashMapC.VectorD.HashSet答案:C解析:ArrayList、HashMap、HashSet均为非线程安全集合,多线程并发操作会出现数据覆盖、元素丢失等问题;Vector是老式线程安全集合,底层方法加了synchronized锁,保证线程安全,但并发性能较差。4.HashSet判断元素重复的依据是()A.仅比较equals()方法B.仅比较hashCode()方法C.先比较hashCode(),相同再比较equals()D.先比较equals(),相同再比较hashCode()答案:C解析:HashSet基于HashMap实现,存储元素时,首先调用对象的hashCode()计算哈希值确定存储位置,若该位置无元素则直接存入;若有元素,再调用equals()判断内容是否相同,相同则判定为重复元素,拒绝存储,不同则发生哈希冲突。5.关于TreeMap的说法正确的是()A.元素无序,可存储null键和null值B.基于哈希表实现C.可根据key自动排序,不允许null键D.线程安全答案:C解析:TreeMap底层是红黑树,可根据key的自然排序或自定义比较器排序;key不能为null,null无法进行比较排序;value可以为null;TreeMap非线程安全,元素有序、无重复key。6.ArrayList的默认初始容量是()A.0B.8C.10D.16答案:A解析:JDK1.8中,ArrayList空参构造会初始化一个空数组(容量0),首次添加元素时,才会扩容为默认容量10;JDK1.7及以前空参构造直接初始化容量10的数组,目前主流开发均使用1.8及以上版本。7.以下不能存储重复元素的集合是()A.ArrayListB.LinkedListC.HashSetD.Vector答案:C解析:List体系(ArrayList、LinkedList、Vector)允许元素重复、有序、可根据下标访问;Set体系(HashSet、TreeSet)不允许存储重复元素。8.HashMap中链表转红黑树的阈值是()A.6B.8C.16D.32答案:B解析:JDK1.8规定,当HashMap单个链表长度≥8,且数组容量≥64时,链表转为红黑树;当链表长度≤6时,红黑树退化为链表,中间7是缓冲值,避免频繁转换影响性能。9.关于ConcurrentHashMap的说法错误的是()A.线程安全,并发性能优于HashtableB.JDK1.8底层为数组+链表+红黑树C.可以存储null键和null值D.采用CAS+synchronized实现并发安全答案:C解析:ConcurrentHashMap不允许存储null键和null值,HashMap可以存储一个null键、多个null值;该设计是为了避免并发场景下null值引发的歧义问题。10.迭代器Iterator的remove()方法作用是()A.删除集合中所有元素B.删除迭代器当前遍历到的元素C.删除集合第一个元素D.删除集合最后一个元素答案:B解析:Iterator的remove()方法专门用于删除当前遍历指向的元素,遍历集合时必须使用该方法删除元素,直接调用集合的remove()方法会触发并发修改异常ConcurrentModificationException。二、填空题(5题)1.List集合的特点是________、________、________。答案:有序、可重复、支持下标访问2.HashMap的默认初始容量是________,默认加载因子是________。答案:16、0.75解析:加载因子0.75是时间和空间成本的最优平衡值,当元素个数=容量*加载因子时,集合触发扩容。3.Set集合中,________基于哈希表无序去重,________基于红黑树有序去重。答案:HashSet、TreeSet4.遍历集合时出现ConcurrentModificationException异常的核心原因是________。答案:迭代遍历过程中,直接修改集合元素(增/删),破坏了集合的修改次数一致性5.JDK1.8中ConcurrentHashMap通过________和________保证并发安全。答案:CAS乐观锁、synchronized悲观锁三、简答题(6题,高频面试真题)1.简述ArrayList和LinkedList的区别,以及实际开发中的使用场景参考答案:(1)底层结构:ArrayList基于动态数组;LinkedList基于双向链表。(2)性能差异:ArrayList随机查询快、中间增删慢;LinkedList中间增删快、随机查询慢。(3)内存占用:ArrayList会预留冗余容量,存在内存浪费;LinkedList每个节点存储数据和前后指针,单个元素内存占用更大。(4)使用场景:业务中查询多、增删少优先用ArrayList(90%业务场景);频繁头尾/中间增删、查询极少的场景用LinkedList。2.HashMap为什么线程不安全?ConcurrentHashMap是如何保证线程安全的?参考答案:HashMap线程不安全原因:多线程并发put数据时,会出现哈希冲突覆盖、元素丢失;JDK1.7还会出现链表环形死循环,导致CPU飙升,且集合未做并发校验,修改次数不一致会触发并发修改异常。ConcurrentHashMap安全机制(JDK1.8):摒弃了1.7的分段锁机制,采用CAS+synchronized锁;锁粒度细化到单个数组桶,仅锁定当前操作的链表/红黑树节点,不影响其他桶的并发操作,兼顾线程安全和并发性能;同时通过volatile修饰数组,保证可见性。3.为什么重写equals()方法必须重写hashCode()方法?参考答案:Java官方规定:两个对象equals()相等,则hashCode()必须相等;但hashCode()相等,equals()不一定相等。如果只重写equals()不重写hashCode(),会导致内容相同的两个对象,哈希值不同,在HashSet、HashMap中会被判定为两个不同对象,造成重复存储,违背集合去重规则,引发业务数据异常。4.HashMap的扩容机制是什么?扩容为什么是2的幂次?参考答案:扩容机制:HashMap初始容量16,加载因子0.75,当元素数量达到12个时触发扩容,每次扩容为原容量的2倍;扩容时会重新计算所有元素的哈希位置,将原数组元素迁移到新数组中。2的幂次原因:元素存储位置通过hash&(容量-1)计算,2的幂次减1后二进制全为1,与哈希值与运算可以均匀散列元素,减少哈希冲突;同时扩容时,元素仅需判断哈希高位,可快速定位新位置,提升扩容效率。5.说说List、Set、Map三者的区别参考答案:(1)List:单列集合,有序、可重复、支持下标索引,适合存储有序数据,代表实现ArrayList、LinkedList。(2)Set:单列集合,无序(TreeSet有序除外)、不可重复、无下标,核心用于数据去重,代表实现HashSet、TreeSet。(3)Map:双列集合,键值对存储(key-value),key唯一不可重复,value可重复,无序,代表实现HashMap、TreeMap、ConcurrentHashMap。6.遍历List时,普通for、增强for、Iterator迭代器的区别?参考答案:(1)普通for循环:基于下标遍历,可遍历、可修改元素、可精准删除指定下标元素,效率高,但代码繁琐。(2)增强for循环:底层基于Iterator实现,代码简洁,仅用于遍历,遍历中不能增删元素,否则报并发修改异常,无下标无法精准定位元素。(3)Iterator迭代器:专门用于集合遍历,支持遍历过程中安全删除当前元素,适配所有集合,是集合通用遍历方式。四、编程题(2道,实战高频)1.去除ArrayList中的重复元素(写出两种实现方式)答案代码:java
importjava.util.ArrayList;
importjava.util.HashSet;
importjava.util.List;
importjava.util.Set;
publicclassListDistinct{
publicstaticvoidmain(String[]args){
ArrayList<String>list=newArrayList<>();
list.add("Java");
list.add("Python");
list.add("Java");
list.add("C++");
//方式一:利用Set去重(最简单,无序去重)
Set<String>set=newHashSet<>(list);
List<String>newList1=newArrayList<>(set);
System.out.println("Set去重结果:"+newList1);
//方式二:遍历判断去重(保留原有顺序)
List<String>newList2=newArrayList<>();
for(Strings:list){
if(!newList2.contains(s)){
newList2.add(s);
}
}
System.out.println("遍历去重结果:"+newList2);
}
}2.遍历HashMap并删除指定key的元素(避免并发修改异常)答案代码:java
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map;
publicclassHashMapRemove{
publicstaticvoidmain(String[]args){
Map<String,Integer>map=newHashMap<>();
map.put("张三",20);
map.put("李四",22);
map.put("王五",25);
//正确方式:使用迭代器删除
Iterator<Map.Entry<String,Integer>>iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String,Integer>entry=iterator.next();
//删除key为李四的元素
if("李四".equals(entry.getKey())){
iterator.remove();
}
}
System.out.println("删除后的map:"+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医疗安全模块(技术)试卷及答案
- 2026年部编版七年级道德与法治下册第4章课后练习题及答案
- 2026年重庆市人教版初中英语八年级上册第11单元阅读理解专项训练习题及答案
- 2026供应链金融创新模式及市场前景预测报告
- 2026企业用工培训体系构建规划解析技能提升与职业发展方向建议
- 2026人工智能在安防领域应用行业发展态势研究产业投资热点研究与市场机遇分析
- 2026中国离心式海底泵行业生产自动化与效率提升路径研究报告
- 2026年北师大版高中生物必修第四册第10章课后练习题及答案
- 2026年人教版高一语文上册第7单元文言文翻译专项训练习题及答案
- 2026年人教版高三政治第4单元中国特色社会主义理论体系测试卷及答案
- 厂区油污管理办法
- 4.2 厘米和米(2)(教学课件) 人教版(2024)小学数学二年级上册
- 消防站建设项目环评报告
- 饲料化验检验试题
- 空调设备安装安全生产培训
- CJT 340-2016 绿化种植土壤
- 频率的稳定性省公开课一等奖新名师比赛一等奖课件
- 超声医学临床技术操作规范
- 芳香保健师-国家职业标准(2023年版)
- 肝脓肿穿刺引流护理查房
- 第一次模拟应用文(二手书交换活动)写作讲义
评论
0/150
提交评论