版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaList高频面试题及详细答案(实战版)1、说一说List集合的特点,以及和Set、Map的核心区别?答案:List是Java有序可重复的单列集合,属于Collection子接口。核心特点有三个:1.有序:元素存入顺序和取出顺序一致,有下标索引,可通过下标精准取值;2.可重复:允许存储重复元素;3.支持索引操作:提供根据增删改查、遍历下标的专属方法。和其他集合的核心区别:-List:有序、可重复、有索引;-Set:无序(部分实现有序)、不可重复、无索引;-Map:双列集合,键值对存储,键不可重复、值可重复。2、ArrayList和LinkedList的底层原理和区别?(面试必问)答案:ArrayList底层基于动态扩容数组实现。初始容量10,每次扩容为原容量的1.5倍。数组的优势是随机访问快,通过下标可直接定位元素,时间复杂度O(1);缺点是增删效率低,中间或头部增删元素时,需要移动大量元素,时间复杂度O(n);另外数组扩容会创建新数组、拷贝原数据,存在一定性能开销。LinkedList底层基于双向链表实现,没有容量限制,无需扩容。优势是首尾增删效率极高,只需要修改节点引用,不需要移动元素,增删首尾节点时间复杂度O(1);缺点是随机访问慢,没有索引直接定位,查询指定下标元素需要从头/尾遍历,时间复杂度O(n)。核心使用场景-频繁查询、遍历、随机取值:优先用ArrayList;-频繁头尾增删元素、极少查询:优先用LinkedList。3、ArrayList默认初始容量、扩容机制详细说一下?答案:JDK1.8中ArrayList空参构造,初始创建的是空数组,并不会直接初始化10容量,是懒加载机制。当第一次调用add()方法添加元素时,才会初始化数组容量为10。扩容规则:当数组元素个数等于数组容量时,触发扩容。新容量=原容量+原容量/2,也就是1.5倍扩容。扩容过程会创建新数组,通过数组拷贝将原数组元素复制到新数组,之后丢弃原数组。如果一次性添加大量元素,1.5倍扩容仍不够时,会直接以所需最小容量作为新数组容量,避免多次扩容。4、ArrayList和Vector的区别?为什么现在不用Vector?答案:1.线程安全:Vector所有增删改查方法都加了synchronized,是线程安全的;ArrayList非线程安全;2.扩容机制:ArrayList1.5倍扩容;Vector默认2倍扩容,空间利用率更低;3.性能:Vector方法锁粒度太大,并发场景下竞争激烈、性能极差;ArrayList无锁,性能高;4.版本:Vector是JDK1.0古老集合,属于遗留类,官方不推荐使用。实际开发中,需要线程安全的List,不会用Vector,而是用CopyOnWriteArrayList,性能远高于Vector。5、List遍历时能不能删除元素?会出现什么问题?怎么解决?答案:普通for循环、增强for循环遍历List时,直接调用集合remove()方法删除元素,会报ConcurrentModificationException并发修改异常。原因:集合内部维护了一个modCount修改次数计数器,迭代器遍历过程中会校验expectedModCount和modCount是否一致。如果遍历过程中手动增删元素,modCount会改变,校验失败直接抛异常。正确解决方案:1.使用迭代器Iterator的remove()方法迭代器自身的remove方法会同步更新expectedModCount,不会触发异常,是最常用、最规范的方式。2.普通for倒序遍历删除正序删除会导致元素前移、索引错位,出现漏删问题;倒序遍历可以规避索引偏移问题,不会报错。3.JDK8+使用removeIf方法通过lambda表达式直接根据条件删除,代码简洁、底层安全,开发中首选。6、说一说CopyOnWriteArrayList的原理和使用场景?答案:CopyOnWriteArrayList是线程安全的List实现类,专门替代Vector,适合并发读多写少的场景。核心原理:写时复制。1.读操作:直接读取原数组,无锁、并发性能极高;2.写操作(增删改):加锁,先拷贝原数组生成一个新数组,在新数组上完成修改操作,修改完成后将原数组引用指向新数组。优点:读不加锁、读写不冲突,并发读取性能远超Vector。缺点:写操作需要拷贝数组,会占用内存、产生新对象,写操作性能差;且数据存在短暂弱一致性,读取到的可能是旧数据,不适合强一致性场景。适用场景:读多写少的并发场景,比如配置列表、白名单、权限列表等。7、Arrays.asList()方法的坑点有哪些?答案:开发中经常用Arrays.asList()将数组转List,但这个方法有三个高频坑,面试常问:1.返回的不是ArrayList,是Arrays内部静态内部类这个内部类没有重写add、remove、clear方法,调用这些方法会直接抛出UnsupportedOperationException不支持操作异常。2.固定大小集合,不支持扩容和删除该集合本质是原数组的视图,数组长度固定,集合大小无法修改。3.基本数据类型数组转换会出错传入int[]、long[]等基本类型数组时,会将整个数组作为一个元素存入List,而不是解析数组中的每个元素;只有包装类型数组(Integer[]、Long[])能正常转换。正确写法:newArrayList<>(Arrays.asList(数组));通过ArrayList构造方法包装一层,得到真正可增删改查的ArrayList集合。8、ArrayList线程不安全的具体表现?答案:多线程同时操作ArrayList,主要有三个问题:1.元素覆盖丢失多个线程同时执行add赋值操作,可能出现后覆盖前的情况,导致部分元素丢失。2.数组越界异常多个线程同时判断容量、触发扩容,会导致数组实际容量不足,赋值时报数组下标越界。3.并发修改异常一个线程遍历,另一个线程增删元素,直接抛出ConcurrentModificationException。所以并发场景绝对不能直接使用ArrayList,必须使用CopyOnWriteArrayList。9、LinkedList能不能当做栈和队列使用?答案:可以。LinkedList实现了List、Deque接口,Deque是双端队列,具备栈和队列的所有特性。1.当做队列:尾进头出,offer()入队、poll()出队;2.当做栈:后进先出,push()压栈、pop()弹栈;日常开发中,简单栈队列场景可以直接用LinkedList,高并发场景推荐使用JUC下的专用队列。10、List集合去重有几种方式?各自优缺点?答案:方式一:通过Set去重newArrayList<>(newHashSet<>(list));优点:代码极简、效率高;缺点:打乱原有顺序。方式二:LinkedHashSet去重newArrayList<>(newLinkedHashSet<>(list));优点:保留原有存入顺序,代码简洁;缺点:大量数据时内存占用稍高。方式三:JDK8Stream去重list.stream().distinct().collect(Collectors.toList());优点:代码优雅、支持链式编程,保留顺序;缺点:旧版本JDK不支持。方式四:遍历判断去重新建空List,遍历原集合,通过contains判断是否存在,不存在则添加。优点:可控性强,可自定义去重规则;缺点:代码繁琐、时间复杂度高,大数据量性能差。11、说说ArrayList的序列化特点?答案:ArrayList底层数组被transient修饰,默认不会被序列化。因为数组是动态扩容的,多数情况下数组存在大量空的冗余容量,直接序列化整个数组会浪费空间和性能。ArrayList重写了writeObject和readObject方法,序列化时只序列化实际存储的有效元素,空位置不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 眉县车辆工程专题试卷
- 重庆市万州区第二高级中学2027届九上数学期末调研模拟试题含解析
- 哈尔滨松北区七校联考2027届九上数学期末调研试题含解析
- 2026高职(家政服务与管理)家庭膳食搭配资格考试试题及答案
- 江西省吉安市泰和县2027届七上数学期末学业水平测试模拟试题含解析
- 2027届天津市北辰区名校七上数学期末学业水平测试试题含解析
- 城市公园植被群落结构对鸟类物种多样性维持的栖息地资源供给研究综述
- 大蒜素气相色谱法二烯丙基三硫醚标准品稳定性检查作业指导书
- 2027届山东菏泽巨野县七上数学期末预测试题含解析
- 2026年浙江省杭州市第一中学八年级英语第11单元语法练习题及答案
- 山东省菏泽市菏泽经济技术开发区2026-2027学年七年级上学期10月阶段检测语文试题(含答案)
- 2026年农田废弃物的资源化利用路径
- 江西新华发行集团有限公司赣州市分公司2026年公开招聘工作人员笔试参考题库及答案解析
- 2026年成人高考专升本政治真题试卷及完整答案解析(官方标准)
- 2026年江苏盐城市中考物理试题(含解析)
- 2026年大学试题(管理类)-港口规划与布置历年参考题库含答案解析
- 2026年道德与法治四年级上册第5课《生命最宝贵》教案设计(2课时)
- 2026年会计从业资格考试初级会计实务考点精讲课件
- 新版2026秋统编版(新版)小学道德与法治五年级上册(全册)知识点清单梳理
- 2026年湖南省工会人员招聘考试备考题库及答案详解
- 2026公务员行测申论高频刷题题库(含详细解析)
评论
0/150
提交评论