当前位置: 首页 > news >正文

【Java零基础】Java核心知识点之:Map

HashMap(数组+链表+红黑树)

HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null,允许多条记录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使HashMap 具有线程安全的能力,或者使用 ConcurrentHashMap。我们用下面这张图来介绍HashMap 的结构。

JAVA7实现

大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的next。

1.capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的2倍。

2.loadFactor:负载因子,默认为 0.75。

3. threshold:扩容的阈值,等于 capacity * loadFactor。

JAVA8实现

Java8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树组成。

根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的长度,为 O(n)。为了降低这部分的开销,在 Java8 中,当链表中的元素超过了 8 个以后,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。

ConcurrentHashMap

1.Segment段

ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个segment。

2.线程安全(Segment 继承 ReentrantLock 加锁)

简单理解就是,ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个Segment 是线程安全的,也就实现了全局的线程安全。

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友

三面蚂蚁金服成功拿到offer后,他说他累了

三面蚂蚁金服成功拿到offer后,他说他累了

…(img-UGgz91mw-1726135294674)]

[外链图片转存中…(img-xSFKQlkS-1726135294674)]

http://www.lryc.cn/news/436486.html

相关文章:

  • 9.12日常记录
  • 光纤的两种模式
  • SpringMVC的初理解
  • Python 基本库用法:数学建模
  • Android Greendao的数据库复制到设备指定位置
  • Ajax 揭秘:异步 Web 交互的艺术
  • TitleBar:打造高效Android标题栏的新选择
  • Lua协同程序Coroutine
  • 【vue+帆软】帆软升级,从版本9升级到版本11,记录升级过程
  • linux从0到1 基础完整知识
  • “人大金仓”正式更名为“电科金仓”; TDSQL-C支持回收站/并行DDL等功能; BigQuery支持直接查询AlloyDB
  • 大模型微调 - 用PEFT来配置和应用 LoRA 微调
  • Ubuntu构建只读文件系统
  • 【黑金系】金融UI/UX体验设计师面试作品集 Figma源文件分享
  • Golang | Leetcode Golang题解之第392题判断子序列
  • Liunx常用指令
  • CSS基础:浮动(float)如何使用清楚以及代替方法
  • margin重叠该怎么解决?
  • Linux学习笔记(黑马程序员,前四章节)
  • tekton pipeline resources
  • 使用Python实现多个PDF文件的合并
  • 微擎忘记后台登录用户名和密码怎么办?解决方法
  • blender我的对称模型好像中点被我不小心移动了 我现在如果雕刻 两边修改的地方不是对称的 我该怎么办
  • 数据库——MySQL概述
  • 云服务器部署DB-GPT项目
  • 基于锂电池的多路直流电源模块设计
  • 蓝奏云网盘搜索网页版PHP源码
  • CocosCreator面试真题详解
  • 线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结
  • 国内外网络安全政策动态(2024年8月)