版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java集合经典笔试题(含详细答案解析)整套试题分为单选题、多选题、判断题、简答题、代码分析题,难度贴合初级、中级Java开发面试笔试,知识点覆盖Java集合核心考点,无偏题怪题,适配求职刷题、校内考核、技术复盘。一、单项选择题(10题)1.以下不属于Java集合体系顶层接口的是()A.Collection
B.Map
C.Iterator
D.Iterable答案:C解析:Java集合核心顶层接口为Collection、Map。Iterable是迭代器顶层接口,用于支持foreach循环;Iterator是迭代器对象,用于遍历集合,不属于集合体系顶层接口。2.关于ArrayList和LinkedList的区别,说法错误的是()A.ArrayList底层是数组,LinkedList底层是双向链表
B.ArrayList随机访问效率更高
C.LinkedList增删首尾元素效率更高
D.ArrayList默认线程安全,LinkedList线程不安全答案:D解析:ArrayList、LinkedList均为非线程安全集合。ArrayList基于动态数组,查询快、增删慢;LinkedList基于双向链表,首尾增删快、随机查询慢。3.HashMap的底层数据结构在JDK1.8之后是()A.数组+单向链表
B.数组+单向链表+红黑树
C.数组+双向链表
D.纯红黑树答案:B解析:JDK1.7及之前:数组+单向链表;JDK1.8优化为数组+单向链表+红黑树。当链表长度大于8且数组容量大于64时,链表转为红黑树,提升查询效率。4.以下集合中,元素可重复、有序、可存null的是()A.HashSet
B.TreeSet
C.ArrayList
D.HashMap答案:C解析:Set体系元素不可重复;ArrayList有序、可重复、允许存多个null;HashMap是键值对集合,不属于单元素集合。5.TreeSet能够实现元素排序的核心原因是()A.自动重写equals方法
B.元素实现Comparable接口或自定义Comparator比较器
C.底层数组自动排序
D.重写hashCode方法答案:B解析:TreeSet基于TreeMap实现,属于有序集合。存入元素必须具备比较能力,要么元素类实现Comparable接口,要么创建集合时传入Comparator比较器,否则运行时报类型转换异常。6.下列关于HashTable和HashMap说法正确的是()A.HashTable效率比HashMap高
B.HashTable线程安全,HashMap线程不安全
C.两者都允许key和value为null
D.底层数据结构完全不同答案:B解析:HashTable方法加了synchronized锁,线程安全、效率低,不允许key、value为null;HashMap线程不安全,允许一个key为null、多个value为null,二者底层均为哈希表结构。7.想要保证集合线程安全,同时兼顾高并发读写性能,优先选择()A.ArrayList
B.Vector
C.ConcurrentHashMap
D.HashMap答案:C解析:Vector锁粒度大,并发性能极差;ConcurrentHashMap采用分段锁(JDK1.7)、CAS+同步锁(JDK1.8),并发读写性能优异,是高并发场景首选键值集合。8.遍历集合时,不能使用普通for循环删除元素,会引发并发修改异常的集合是()A.ArrayList
B.Vector
C.ConcurrentHashMap
D.CopyOnWriteArrayList答案:A解析:ArrayList迭代遍历中,直接调用集合remove()方法会修改modCount,引发ConcurrentModificationException。CopyOnWriteArrayList读写分离,遍历时不会触发该异常。9.HashMap默认初始容量和默认负载因子是()A.16、0.75
B.10、0.75
C.16、0.5
D.32、0.75答案:A解析:HashMap默认初始容量16,默认负载因子0.75。当集合元素数量达到容量*负载因子时,触发自动扩容,扩容为原容量的2倍。10.以下哪个集合可以实现去重且有序存储元素()A.HashSet
B.LinkedHashSet
C.ArrayList
D.LinkedList答案:B解析:HashSet去重但无序;LinkedHashSet基于哈希表+链表,可去重、保留插入顺序;List集合允许元素重复,无法自动去重。二、多项选择题(5题)1.以下属于线程不安全的集合有()A.ArrayList
B.LinkedList
C.HashMap
D.ConcurrentHashMap答案:ABC解析:ArrayList、LinkedList、HashMap均为非线程安全集合;ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet是JUC包下的线程安全集合。2.JDK1.8HashMap中,链表转为红黑树的条件包含()A.链表长度大于8
B.数组容量大于等于64
C.链表长度大于16
D.数组容量大于16即可答案:AB解析:满足两个条件才会树化:1.单条链表节点数>8;2.数组容量≥64。若仅链表过长、数组容量不足,会优先触发扩容,而非树化。3.关于List集合说法正确的有()A.元素有序可重复
B.支持通过下标索引访问元素
C.ArrayList适合大量查询场景
D.LinkedList适合大量增删场景答案:ABCD解析:List特性:有序、可重复、支持索引。ArrayList查询效率高,随机增删效率低;LinkedList首尾增删效率高,随机查询效率低。4.以下能正确遍历ArrayList的方式有()A.普通for循环+下标
B.增强for循环
C.Iterator迭代器遍历
D.while循环配合迭代器答案:ABCD解析:以上四种方式均为List集合标准遍历方式,其中迭代器遍历可安全删除元素,增强for循环底层依赖迭代器,遍历中不可直接删除元素。5.关于LinkedHashMap说法正确的有()A.继承自HashMap
B.可以保留元素插入顺序
C.可以实现LRU缓存策略
D.元素无序答案:ABC解析:LinkedHashMap是HashMap的子类,通过双向链表维护元素顺序,默认保留插入顺序,开启访问排序模式后可实现简易LRU缓存。三、判断题(5题)1.HashSet底层本质是HashMap,元素存储在HashMap的key位置。()答案:正确解析:HashSet内部维护一个HashMap,add的元素作为Map的key,value统一为固定空对象,利用key不可重复特性实现去重。2.多线程环境下,使用Vector一定比ArrayList安全且效率更高。()答案:错误解析:Vector线程安全,但全部方法加独占锁,并发效率极低。高并发场景优先使用CopyOnWriteArrayList,而非Vector。3.HashMap中,key相同的元素会覆盖原有value值。()答案:正确解析:HashMap存入重复key时,新value会替换旧value,put方法会返回旧的value值。4.TreeMap可以存储null键和null值。()答案:错误解析:TreeMap基于排序实现,不允许null键,会报空指针异常;允许存储null值。HashMap允许一个null键、多个null值。5.增强for循环遍历集合时,可以直接删除集合元素。()答案:错误解析:增强for循环底层使用迭代器,遍历过程中通过集合对象删除元素,会触发并发修改异常。如需删除,需使用迭代器自带的remove方法。四、简答题(6题,核心面试考点)1.简述ArrayList扩容机制(JDK1.8)答案解析:1.ArrayList初始创建空参构造时,初始为空数组,第一次添加元素时初始化容量为10;2.当集合元素个数达到数组容量时,触发扩容;3.扩容规则为原容量+原容量/2,即扩容1.5倍;4.扩容时会创建新数组,通过Arrays.copyOf将原数组元素复制到新数组,替换原数组;5.频繁扩容会产生大量新数组、消耗性能,预知数据量时建议初始化指定容量。2.HashMap为什么线程不安全?JDK1.7和1.8不安全的表现有什么区别?答案解析:HashMap所有操作无锁保护,多线程并发操作会出现数据覆盖、元素丢失、死循环等问题。JDK1.7:并发扩容时,链表节点会发生头尾倒置,多线程同时扩容容易出现链表死循环,导致CPU占用100%;JDK1.8:优化了扩容链表迁移逻辑,解决了死循环问题,但依然存在数据覆盖、元素丢失问题,依旧线程不安全。3.equals和hashCode在HashMap中的作用,为什么重写equals必须重写hashCode?答案解析:1.hashCode:计算key的哈希值,确定元素在哈希表中的数组下标,用于快速定位位置;2.equals:当哈希值相同时,通过equals判断key是否为同一个对象,解决哈希碰撞问题;3.若只重写equals不重写hashCode,两个逻辑相等的对象,哈希值可能不同,HashMap会判定为两个不同的key,导致重复存储、去重失效,违背集合特性。4.简述ConcurrentHashMap线程安全原理(JDK1.8)答案解析:JDK1.8放弃了分段锁,采用CAS+synchronized锁实现线程安全:1.无哈希冲突时,通过CAS无锁操作添加元素,效率极高;2.发生哈希冲突时,对数组桶的头节点加synchronized独占锁,锁粒度极小;3.读写分离,读操作大部分无锁,支持高并发读取;4.红黑树节点操作采用单独锁机制,保证树结构修改安全。5.CopyOnWriteArrayList的原理和适用场景是什么?答案解析:原理:写时复制。修改(增、删、改)元素时,不直接修改原数组,而是复制一份新数组,在新数组上修改,修改完成后替换原数组;读操作直接读取原数组,无锁。场景:读多写少的高并发场景,如配置列表、白名单、静态数据缓存。缺点是写操作会复制数组,占用内存,不适合大量写操作场景。6.HashSet、LinkedHashSet、TreeSet三者的区别?答案解析:1.HashSet:底层HashMap,无序、去重,查询存储效率最高;2.LinkedHashSet:继承HashSet,底层哈希表+双向链表,有序(插入顺序)、去重,效率略低于HashSet;3.TreeSet:底层TreeMap,自然排序/自定义排序、去重,有序但增删查询效率较低,适合需要自动排序的场景。五、代码分析题(2题,高频错题)1.分析以下代码运行结果,并说明原因PlainText
publicclassTestList{
publicstaticvoidmain(String[]args){
ArrayList<String>list=newArrayList<>();
list.add("1");
list.add("2");
list.add("3");
for(Strings:list){
if("2".equals(s)){
list.remove(s);
}
}
System.out.println(list);
}
}答案:抛出ConcurrentModificationException并发修改异常解析:增强for循环底层依赖迭代器遍历,迭代过程中集合的modCount会被记录。直接使用集合的remove()方法会修改modCount,迭代器校验发现数值不一致,直接抛出并发修改异常。正确写法:使用迭代器的remove()方法,或普通for循环倒序删除。2.分析HashMap存入自定义对象去重失效的原因PlainText
classUser{
privateStringname;
privateintage;
//仅重写equals方法
@Override
publicbooleanequals(Objecto){
if(this==o)retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中小学生航空航天科普知识竞赛真题试卷及答案
- 2025年中医学知识竞赛试题及答案详解
- 2025年注册营养师考试试题及答案
- 2025全国保密教育线上培训考试试题及答案
- 2025一级消防工程师继续教育题库及答案
- 2025中医经典课程试题及答案
- 2026年二级建造师建筑工程模拟试题(含答案)
- 2026年大学生心理健康测模拟题(含答案)
- 肿瘤放疗生物标志物研究
- 中西医结合治疗新进展报告
- 英语-全国天域名校协作体2027届高三10月联考
- 小学三年级劳动教育《交通指挥有学问》教学设计
- 07SD101-8电力电缆井图集
- 2026 年教师师德师风建设专题学习课件
- 2026苏教版小学六年级科学上册(全册)每课课时练习及答案
- 2025-2026学年人教版九年级数学上册期中提优测评试卷(含答案)
- AI在不良资产处置智能化中的应用探索
- 多多买菜协议合同
- 《MATLAB编程及应用》全套教学课件
- 2026年浦发银行春季校园招聘笔试真题
- 2026年中建质量员考证提分评估复习【必刷】附答案详解
评论
0/150
提交评论