【Java进阶营】java面试题 --- 集合

Java集合面试题 52道 集合容器概述 什么是集合 集合就是一个放数据的容器,准确的说是放数据对象引用的容器 集合类存放的都是对象的引用,而不是对象的本身 集合类型主要有3种:set(集)、list(列表)和map(映射)。 集合的特点 集合的特点主要有如下两点: 集合用于存储对象的容器,对象是用来封装数据,对象多了也需要存储集中式管理。 和数组对比对象的大小不确定。因为集合是可变长度的。数组需要提前定义大小 集合和数组的区别 数组是固定长度的;集合可变长度的。 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数 阅读详情
1. java 集合你了解吗?

    java 集合最顶层接口是 Collection 和 Map;
    Collection 有三个核心接口,分别是 List,Set,Queue;
    List 是有序可重复的,它的主要实现类有 ArrayList、LinkedList 和 Vector;
    ArrayList 是数组实现的,查询快增删慢线程不安全;
    LinkedList 是链表实现的,查询慢增删快线程不安全;
    Vector 相当于线程安全的 ArrayList;
    Set 是无序不重复的,它的主要实现类有 HashSet、TreeSet 和 LinkedHashSet,它们分别是用对应的 Map 实现的,比如 HashSet 就是用 HashMap实现的,注意 TreeSet 是有序的;
    Queue 是队列,主要有阻塞队列 BlockingQueue。Map 的主要实现类有 HashMap、LinkedHashMap、HashTable 和 TreeMap。

2. 什么是集合的快速失败机制?

    集合内部会维护一个 modCount 变量,遍历的时候,会判断 modCount 变量的值是否等于期望值,不等就会报并发修改异常。

3. 用 for 循环遍历集合的同时移除元素可以吗?

    不可以,会报并发修改异常。要边遍历边移除元素,只能用迭代器。

4. HashMap 底层是用什么实现的?

    jdk1.7 的 HashMap 采用拉链法,数组加链表实现的;
    jdk1.8 的 HashMap 采用了数组加链表加红黑树实现。

5. HashMap (jdk1.8) 怎么初始化的?

    如果调用的是无参构造,不会立即初始化数组,要等 put 元素时才会初始化一个长度为 16 的数组;
    如果调用的是带参构造,就会将数组长度初始化为最接近传入参数的 2 的 n 次幂,比如传入的是 6,那就初始化为 8。

6. HashMap (jdk1.8) 怎么计算索引的?

    首先会对 key 的 hashCode 值的高十六位与低十六位做一个异或 (^) 运算,这样做是为了让 key 的整个 hashCode 都能参与接下来的计算,减少 hash 碰撞的概率,且异或运算得到 0 和 1 的概率一样,不会影响数据分布;
    接着拿到刚才计算出来的值,和数组长度减一之后的值进行与 (&) 运算,就得到了索引。

7. HashMap (jdk1.8) 计算索引时为什么用与 (&) 操作?

    正常情况计算索引应该是 hashCode 值对数组长度取模,即求余,但是取模运算的效率不高,所以改用与 (&) 操作。

8. HashMap (jdk1.8) 数组长度为什么是 2 的 n 次幂?

    只有当数组长度为 2 的 n 次幂时,hashCode 值与 (&) 数组长度减一的计算结果才会和 hashCode 值对数组长度取模的计算结果才会一致;
    同时 2 的 n 次幂减一的二进制是若干个 1,和奇数计算最后结果是奇数,和偶数计算的结果是偶数,如果最后一位是 0,那么不管和奇数还是偶数进行与 (&) 计算的结果都是偶数,不能保证散列分布均匀。

9. HashMap (jdk1.8) 计算拿到索引后直接把元素存在那个位置吗?

    拿到索引后,先判断索引位置是否有元素,如果没有,直接把元素放到索引位置;
    如果有,判断 key 是否一样,如果一样,新值覆盖旧值;
    如果不一样,就在此处生成链表,元素存到链表中。

10. HashMap (jdk1.8) 什么时候生成红黑树?

    当链表长度达到 8,且数组长度达到 64 的时候,就会生成红黑树;
    当红黑树节点少于 6 个的时候,又会将红黑树转回链表。

11. HashMap (jdk1.8) 数组什么时候扩容?

    扩容因子是 0.75,当数组中元素个数达到数组长度的 3/4 时就扩容,扩容为原来的两倍。

12. HashMap (jdk1.8) 数组扩容后数据怎么转移?

    如果原先数组那位位置的元素是单个元素或者红黑树,那就放到 hash 与 (&) 新数组长度减一的位置;
    如果是链表,那就判断 hash 与 (&) 旧数组长度是否为 0,如果是,就放在原来索引处,如果不是,就放在原来索引加上旧数组长度处。

13. 既然 HashMap (jdk1.8) 不安全,那并发情况下用什么?

    用 ConcurrentHashMap。

14. ConcurrentHashMap 的底层你知道吗?

    jdk1.7 的 ConcurrentHashMap 底层是 Segment 数组,Segment 数组存放的元素是 HashEntry 数组,HashEntry 数组存放的元素是链表。每次锁住一个 Segment,保证安全性的同时提高了并发性,这就是锁分段机制;
    jdk1.8 的 ConcurrentHashMap 的底层是数组加链表加红黑树,用 Synchronized 和 CAS 来保证线程安全。

15. ArrayList 的 elementData 为什么用 transient 修饰?

    加上 transient 就不会直接序列化整个数组,序列化的时候只序列化数组中存的元素,而不是整个数组,既加快了序列化速度也减小了序列化后文件的大小。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

16. List 和 Set 如何选用?

    List 支持随机快速访问,支持用索引获取元素,Set 不支持。所以如果增删操作比较多,适合用 Set,查询操作比较多,适合用 List;
    List 是有序可重复的,而 Set 是无序不重复的。所以可以根据存入的元素是否需要顺序、是否可以重复来决定用什么。

17. HashSet 如何保证元素不重复?

    HashSet 底层是 HashMap,HashSet 存储的元素就存放在 HashMap 的 key 中,HashMap 的 key 是否相同是先比较 hashCode 值再用 equals 方法比较。

18. 为什么 String、Integer 适合作为 HashMap 的 key?

    因为 String 和 Integer 都是 final 类型的,能够保证 hash 值的不可更改性;
    String 和 Integer 已经重写了 hashCode 方法和 equals 方法,可以保证计算的准确性。
【Java 集合】 集合概述Java 集合概览Java 集合,也叫作容器,主要是由两大接口派生而来:一个是Collection接口,主要用于存放单一元素;另一个是Map接口,主要用于存放键值对。对于CollectionListSetQueue。Java 集合框架如下图所示:Java 集合框架概览注:图中只列举了主要的继承派生关系,并没有列举所有关系。比方省略了等抽象类以及其他的一些辅助类,如想深入了解,可自行查看源码。说说 List, Set, Queue, Map 四者的区别?List。 阅读详情

相关推荐

【Java进阶营】聊聊Java里常用的并发集合

前言 在我们的程序开发过程中,如果涉及到多线程环境,那么对于集合框架的使用就必须更加谨慎了,因为大部分的集合类在不施加额外控制的情况下直接在并发环境中直接使用可能会出现数据不一致的问题,所以为了解决这个潜在的问题,我们要么在自己的业务逻辑中加上一些额外的控制,例如锁,或者我们直接使用Java提供的可在并发环境中使用的集合类,这是一个简便而且高效的方法。那么我们下面就来了解下Java提供了哪些“神器”可以让我们安全的使用集合。 正文 非阻塞式安全列表 - ConcurrentLinkedDeque Concu

java700001的博客 234

【Java集合框架面试题(30道)】

Java集合框架 List、Map、Set常见面试题目;重点时Map,包含HashMap结构、设计原理、红黑树、1.8新特性中的优化内容、put流程等面试知识梳理。

独上高楼,望尽天涯路。 9883

开源大模型“去审查化”技术解析:从LLaMA架构到本地部署与伦理边界

大型语言模型(LLM)基于Transformer架构,通过海量数据训练获得理解和生成自然语言的能力。其核心原理在于自注意力机制对上下文关系的建模。为了确保输出内容的安全与合规,主流模型普遍采用基于人类反馈的强化学习(RLHF)等技术进行安全对齐。这一过程旨在使模型行为符合人类价值观,是AI伦理工程实践的关键环节。然而,在特定研究场景下,如对抗性测试或内容安全算法研究,技术人员需要模拟极端对话以评估系统鲁棒性,这催生了针对“去对齐”或“移除护栏”的技术探索。此类技术通常通过对预训练模型进行反向微调或继续训练来

weixin_33743880的博客 596

java面试题-集合篇

java集合相关面试题

qq_33129875的博客 3239

MAX3232芯片引脚功能详解与外围电路设计避坑指南(从电荷泵到静电防护)

本文详细解析了MAX3232芯片的引脚功能与外围电路设计,重点介绍了其电荷泵架构和RS232通信接口的应用。通过实际案例和参数对比,提供了电路设计中的常见问题解决方案和静电防护建议,帮助工程师优化工业控制与嵌入式系统中的通信可靠性。

weixin_30596165的博客 436

基于逆向工程的中国裁判文书网爬虫技术深度解析:从反爬破解到合规抓取

最近承接了一个法律大数据分析的项目,需要获取某类合同纠纷的裁判文书数据,用于分析不同地区的判决规律、法官的裁判倾向以及法条适用情况。原本以为用常规的Python爬虫就能搞定,结果刚对着中国裁判文书网发了几个请求,就遭遇了“滑铁卢”:要么请求直接返回403 Forbidden,要么触发滑块验证码,甚至连IP都被临时封禁了。普通的requests+BeautifulSoup组合在裁判文书网面前完全失效,这也让我意识到,想要获取这里的数据,必须先通过逆向工程拆解网站的请求逻辑和反爬机制。经过一周的摸索,从抓包分析

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3173

Java常见集合(含2024最近面试题)

集合相关面试题

qq_48428343的博客 4280

【NodeRed】node-red-contrib-opcua实现PLC读写

在之前的博文【Node-RED】node-red-contrib-opcua-server模块使用(1)中,我们介绍了用node-red-contrib-opcua-server模块实现OPCUA服务端的,以及二次开发的内容。本节博文中我们采用官方社区自带的node-red-contrib-opcua组件开展对OPCUA客户端的介绍,详细阐述用该组件中OpcUa-Client节点实现客户端对PLC的读写,以及实现过程中遇到的问题。由于官方社区中并没有找到该组件的介绍实例,这也是本博文编写的第1个原因。

weixin_48618536的博客 961

常见JAVA集合面试题(自用整理,持续更新)

接口实现类线程安全替代方案特点适用场景ListArrayList非线程安全动态数组,查询快、增删慢,允许null元素单线程环境下的快速访问LinkedList非线程安全双向链表,增删快、查询慢,允许null元素频繁增删的单线程场景Vector线程安全(过时)动态数组,线程安全,性能低,已被替代遗留代码兼容Stack线程安全(过时)使用Deque实现(如 ArrayDeque)继承自 Vector,后进先出(LIFO)结构栈结构需求,但推荐使用DequeSet。

heguoqin123的博客 3781

DeiT详解:知识蒸馏的Transformer

DeiT模型(8600万参数)仅用一台 GPU 服务器在 53 hours train,20 hours finetune,仅使用 ImageNet 就达到了 84.2 top-1 准确性,而无需使用任何外部数据进行训练,性能与最先进的卷积神经网络(CNN)可以抗衡。其核心是提出了针对 ViT 的教师-学生蒸馏训练策略,并提出了方法,使得在视觉领域训练得又快又好。

走在深度学习前沿的小宋 2637

全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中)

QCC3040开发笔记之基本介绍(0) QCC3040开发笔记之开发环境搭建(1) QCC3040开发笔记之debug调试(trb调试,usbt调试,adb调试,WIFI调试)(2) QCC3040开发笔记之按键配置(3) QCC3040开发笔记之按键切换(4) QCC3040开发笔记之按键逻辑(5) QCC3040开发笔记之tone(6) QCC3040开发笔记之提示音(7) QCC3040开发笔记之bitserial接口(8) QCC3040开发笔记之双mic+AEC+ANC(9...

心跳包的博客 3万+

Java集合面试题

Java集合面试题 Java 集合框架的基础接口有哪些? Collection ,为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。Java 平台不提供这个接口任何直接的实现。 Set ,是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。 List ,是一个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List 更像长度动态...

木村的博客 2万+

组建高效AI开发团队:角色、技能与协作

在当今科技飞速发展的时代,人工智能(AI)已经成为各个领域的核心驱动力。组建高效的AI开发团队对于企业和科研机构来说至关重要,它能够推动创新、提高竞争力、实现业务目标。本文的目的在于为那些希望组建或优化AI开发团队的管理者、技术负责人以及相关从业者提供全面的指导。范围涵盖了团队角色的定义、所需技能的分析、团队协作的策略,以及实际项目中的应用和相关资源的推荐。本文将首先介绍AI开发团队的核心概念与联系,包括团队角色、技能和协作之间的关系。接着阐述核心算法原理和具体操作步骤,结合数学模型和公式进行详细讲解。

2502_91592937的博客 995

Java 44个集合面试题及答案

但从更大的范围和使用来看,Java 1.2 提出了集合框架,将所有集合接口、实现和算法分组。Java 集合通过使用泛型和并发集合类实现线程安全操作已经取得了长足的进步。它还包括 Java 并发包中的阻塞接口及其实现。通过使用核心集合类而不是实现我们自己的集合类来减少开发工作量。通过使用经过充分测试的集合框架类,代码质量得到提高。通过使用 JDK 附带的集合类减少代码维护工作量。可重用性和互操作性。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 3435

VN1640 CH5 I/O通道终极指南:【从硬件原理—>工程实战—>自动化测试实战】

摘要:本文详细解析Vector VN1640 CH5 I/O通道的硬件原理与工程应用,涵盖模拟输入(AIN)、数字输入(DIN)和数字输出(DOUT)三大功能模块的配置指南。通过硬件隔离设计实现高精度信号采集与驱动控制,重点分析开漏输出特性及保护机制。提供PWM控制、ECU上电时序测试、传感器闭环控制等实战案例的CAPL脚本代码,并强调多设备同步采集的精准性(时间偏差<1µs)。适用于汽车电子HIL测试、ECU信号监测等场景,所有方案均通过实际项目验证。

汽车控制器系统开发、VIL测试、HIL测试、MIL测试、EMS电喷系统标定与开发、热管理系统标定 760

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java集合常见面试题

Java集合常见面试题。

TV男神 1458

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java基础——集合进阶3

Java基础——集合进阶4——ArrayList实现类

2401_84643729的博客 1044

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

集合面试题

一个大小有限的队列当队列添加满的时候, 添加线程等待/阻塞;当队列为空的时候, 删除线程等待/阻塞Iterator是Java提供的用于顺序访问集合数据的一个设计模式,通过Iterator可以对集合数据进行原地遍历(不需要再额外复制一份数据)Collection的子实现都实现了Iterator遍历数据的方式Java集合分为collection和map两大类,collection是存储的是对象,map存储的是键值对。

qq_54765948的博客 1864

【八股战神篇】Java集合高频面试题

通过分析上千篇面经和上万道面试题,提炼出高频面试题及其延伸问题。总结出来Java集合高频面试题。

m0_62332728的博客 1223

Java面试题总结 - Java集合篇(附答案)

这样一来,当集合添加新的元素时,先调用这个元素的hashcode()方法,就一下子能定位到他应该放置的物理位置上。(2)List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。

web18285997089的博客 1391

Java集合面试题汇总资源下载:面试必备良药,助你Java集合知识一臂之力

Java集合面试题汇总资源下载:面试必备良药,助你Java集合知识一臂之力 【下载地址】Java集合面试题汇总资源下载 此项目为Java开发者提供了《Java集合面试题汇总.pdf》文件的下载资源,内容涵盖Java集合框架的常见面试题目及详细解答。无论是初学者还是经验丰富的开发者,都能从中获取有价值的面试准备资料,深入理...

gitblog_06757的博客 820

Java 集合面试题

HashMap是不安全的,主要是因为HashMap内部在多线程并发访问的时候,没有进行同步处理,所以在是线程不安全的实现HashMap的线程安全有以下几种方法:调用Collections.syncronizedMap()方法来实现线程安全,会对所有方法调用加锁,确保同一时刻只有一个线程能够访问集合对象使用线程安全的集合类,如ConcurrentHashMap类,就是线程安全的。

lcy57__的博客 1399

【Java进阶营】Java 中初始化 List 集合的 6 种方式

List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。 1、常规方式 List languages = new ArrayList<>(); languages.add(“Java”); languages.add(“PHP”); languages.add(“Python”); System.out.println(languages); 这种就是我们平常用的最多最平常的方式了,没什么好说的,后面缺失的

hong1008611的博客 2034

Java集合常见面试题汇总

Java集合常见面试题汇总 1. 写出 List、Set、Map的各自特点 List接口: 存储任意类型的Object对象,有序、有下标、元素可以重复; 下标范围:0~元素个数-1 0~size()-1 Set集合: 无序、无下标、元素内容不允许重复; Map集合: (1) Map以键值对形式存储(key-value)。 (2) 键:无序、无下标、元素不允许重复(唯一)。 (3) 值:无序、无下标、元素内容允许重复。 2. 写出 ArrayList 和 Vector的区别 a. ArrayList:

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 955
下一篇: 【Java进阶营】java面试题 --- IO
宇小哥
博客等级 码龄5年 4粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值