《JAVA八股真解》二、集合

#JAVA##JAVA面经##JAVA内推#

1. Java 常用的集合、分类及涉及的接口

Java 集合主要分为四大类:ListSetMapQueue,它们都继承自 Collection 接口或 Map 接口。

类型 特性 实现类
List 有序,允许重复元素 ArrayList, LinkedList, Vector
Set 无序,不允许重复元素 HashSet, TreeSet, LinkedHashSet
Map 键值对存储,键唯一 HashMap, TreeMap, LinkedHashMap
Queue 队列结构,先进先出(FIFO) ArrayDeque, PriorityQueue, LinkedList
核心接口说明:
  • Collection 接口:所有集合类的根接口,包含 add()remove()size() 等基本方法。
  • List 接口:按顺序存储元素,支持索引访问,常用实现有 ArrayList(动态数组)、LinkedList(双向链表)。
  • Set 接口:不包含重复元素,常用实现有 HashSet(基于哈希表)、TreeSet(基于红黑树,有序)。
  • Map 接口:存储键值对(key-value),通过键快速查找值,常用实现有 HashMapTreeMap
  • Iterator 接口:迭代器,用于遍历集合中的元素,可通过 iterator().next()hasNext() 方法进行遍历。

提示Iterator 是集合通用的遍历方式,适用于所有实现了 Iterable 接口的集合类。

2. HashMap 底层原理

从 JDK 1.8 开始,HashMap 的底层结构由“数组 + 链表”升级为“数组 + 链表 + 红黑树”。

基本结构

  • 数组:存储桶(bucket),每个桶可以存放一个链表或红黑树。
  • 链表/红黑树:当某个桶中元素过多时,会转换为红黑树以提高查询效率。

关键参数

  • 默认负载因子(load factor):0.75,表示当桶的数量达到容量的 75% 时触发扩容。
  • 默认初始容量(capacity):16,即数组大小为 16。
  • 阈值(threshold)capacity * load factor,即扩容临界点。

注意:当元素数量超过 threshold 时,HashMap 会自动扩容至原容量的两倍。

扩容机制

  1. 当元素数量达到 threshold 时,触发扩容。
  2. 创建新数组,大小为原数组的两倍。
  3. 将原有元素重新计算哈希值并插入新数组中。
  4. 这个过程称为“rehashing”,虽然耗时,但能有效提升性能。

链表与红黑树

  • 链表:当桶中元素少于 8 个时,使用链表存储。
  • 红黑树:当链表长度超过 8 且数组容量大于 64 时,链表转换为红黑树;反之则转回链表。

为什么用红黑树?

  • 红黑树是一种平衡二叉搜索树,保证了在最坏情况下查找时间复杂度为 O(log n),而链表为 O(n)。
  • 在高并发场景下,红黑树能显著提升性能。

3. HashMap 为什么用红黑树不用 B 树?

尽管 B 树也是一种高效的平衡树,但 HashMap 选择红黑树的原因如下:

  1. B 树的节点通常包含多个关键字,而红黑树每个节点只有一个关键字,更适合单键查找。
  2. 红黑树的插入、删除、查找平均时间复杂度均为 O(log n),且实现相对简单。
  3. B 树需要维护多个子节点指针,增加了内存开销和实现复杂度。
  4. HashMap 主要用于单次查找,不需要频繁的范围查询,因此红黑树更合适。

:红黑树在插入、删除、查找上的综合表现优于 B 树,尤其适合 的应用场景。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论
接好运
点赞 回复 分享
发布于 03-07 12:59 广东
专栏目录https://www.nowcoder.com/share/jump/1772859327707
点赞 回复 分享
发布于 03-07 12:59 广东
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏。
点赞 回复 分享
发布于 03-06 15:52 广东

相关推荐

我是前年秋招拿到offer,也会和各位一样保持忐忑的心理,也对于网上的一些传闻非常担心,所以我那时候也去提前实习了,不过发现有些东西和想象的不一样实际感受才发现我们部门还可以(氛围不错,时长也是正常的,加上了解到的部门竞业情况没有传言那么离谱),最后就决定毕业留下来了。从大家担忧的各个点来说,我觉得我们部门性价比挺高的第一次投递(用的我的内推码)一般最后是分配到我们部门的~最重要的是:PDD暑期实习性价比极高!!!!!⭐ 为什么说这个暑期实习“性价比很高”① 实习满2个月即可申请转正相比很多公司需要 3-6个月实习,PDD暑期实习满2个月即可发起转正流程。② 实习转正薪资通常高于校招入职通过 实习转正入职的薪资一般更有优势。③ 免费三餐 + 高薪实习公司提供 免费三餐 + 有竞争力的实习薪资。📣拼多多集团-PDD | 招2027届研发实习生啦!📍5大技术岗,坐标上海🌟个人成长快,转正率高;点击查看详情投递~【拼多多集团-PDD校园招聘】🔗 内推链接:https://careers.pddglobalhr.com/campus/intern?t=IU9k50iFrF🎫 内推码:IU9k50iFrF。招聘岗位:算法实习生服务端研发实习生安全实习生Web前端研发实习生客户端研发实习生工作期间将指派一位大牛导师进行带,帮助提升技术和融入团队工作期间公司提供免费三餐,以及极具竞争力的薪酬,不卡转正投递的可以私聊一下,姓名缩写+岗位,我这边可以直接处理一下,以及方便后续跟进度部门氛围好,性价比高(更多详细情况欢迎私聊)PS: 关于我们团队、职位咨询、简历内推、 进度/结果查询 都欢迎留言/私信进行沟通(每天都会查看)。引流:,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,,    、中行、    、工行、建行、光大、    、    、、新华三、京东方、容知日新、长鑫存储、    、    、    、,    ,    ,    ,    ,,虎牙,    ,bigo,    ,亚马逊,荣耀,,联想,tplink,第四范式,米哈游,    ,旷视,美的,索尼,    ,    ,momenta,欢聚,    ,用友,,    ,    ,地平线,    ,汇顶,
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务