HashMap底层原理
0 人感兴趣 · 19 次引用
- 最新
- 推荐
![https://static001.geekbang.org/infoq/ce/ce4e92e459c02a2ddb1e09e3dca870e8.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/ce/ce4e92e459c02a2ddb1e09e3dca870e8.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
字节二面:HashMap 线程不安全体现在哪里?
HashMap线程不安全体现在哪里?如果你到现在还不清楚赶紧看下去,明明白白补一补~。
![https://static001.geekbang.org/infoq/f9/f91e9b4b909f503ed74334e934ee1285.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/f9/f91e9b4b909f503ed74334e934ee1285.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
Redis Set 用了 2 种数据结构来存储,到现在才知道
Sets 无序集合,他的功能就好像你熟悉的 Java 中的 HashSet 一样。集合是通过散列表实现的,所以添加、删除、查找元素的时间复杂度是 O(1)。
详解 HashMap 源码解析(下)
上文介绍了HashMap整体介绍了一下数据结构,主要属性字段,获取数组的索引下标,以及几个构造方法。本文重点讲解元素的添加、查找、扩容等主要方法。
![https://static001.geekbang.org/infoq/f6/f6499b419b909aa2600e79906537296d.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/f6/f6499b419b909aa2600e79906537296d.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
【面试题系列】CurrentHashMap 的实现原理
1,实现方式:synchronized+CAS+HashEntry+红黑树
![https://static001.geekbang.org/infoq/3a/3aaf72123c95812afcffece45b3f8416.webp?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/3a/3aaf72123c95812afcffece45b3f8416.webp?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
![https://static001.geekbang.org/infoq/bf/bf818ae9b388141f3d1cc6983c5d210f.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/bf/bf818ae9b388141f3d1cc6983c5d210f.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
HashMap 从入门到精通,原创好文,值得收藏!
大多数 JAVA 开发人员都在使用 Maps,尤其是 HashMaps。HashMap 是一种简单而强大的存储和获取数据的方式。但是有多少开发人员知道 HashMap 在内部是如何工作的?
![https://static001.geekbang.org/infoq/62/62699238f5c67314a969d51273e28d53.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/62/62699238f5c67314a969d51273e28d53.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
工作三年,小胖连 HashMap 源码都没读过?真的菜!
在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的,JDK 1.8 之后新增了红黑树的组成结构,当链表长度大于 8 并且 hash 桶的容量大于 64 时,链表结构会转换成红黑树结构。所以,它的组成结构如下图所示:
![https://static001.geekbang.org/infoq/89/896e5d0b2868021e4eb1b7aae2174449.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/89/896e5d0b2868021e4eb1b7aae2174449.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
HashMap 加载因子为什么是 0.75?
如果加载因子比较大,扩容发生的频率比较低,浪费的空间比较小,发生hash冲突的几率比较大。比如,加载因子是1的时候,hashmap长度为128,实际存储元素的数量在64至128之间时间段比较多,这个时间段发生hash冲突比较多,造成数组中其中一条链表比较长。
![https://static001.geekbang.org/infoq/9a/9a4a4e35b26e13be3ef56f31ae168d53.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/9a/9a4a4e35b26e13be3ef56f31ae168d53.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
盘点 HashMap 的实现原理及面试题
如果被问到 HashMap 相关的问题,它的工作原理都会被作为面试的开场白,这个时候先装作若有所思的样子冷静一下。首先 HashMap 是基于 hashing 的原理,我们知道 HashMap 有两个常用的方法 put()、get(),将键值对传递给 put() 方法时,
![https://static001.geekbang.org/infoq/a7/a70cd76ad586c145dc07765a9dedf74a.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/a7/a70cd76ad586c145dc07765a9dedf74a.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
![https://static001.geekbang.org/infoq/ce/ce0a8630b32233eee8e8de982b2ce78c.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/ce/ce0a8630b32233eee8e8de982b2ce78c.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
![https://static001.geekbang.org/infoq/dd/ddd6206fdb949bc9ef82e01e2cb97105.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/dd/ddd6206fdb949bc9ef82e01e2cb97105.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
![https://static001.geekbang.org/infoq/a7/a73bb1c201dc2a0785d830cf0bfe652e.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234](https://static001.geekbang.org/infoq/a7/a73bb1c201dc2a0785d830cf0bfe652e.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234)
了解 HashMap 数据结构,超详细!
面试必备HashMap,这里详细写明了各个关于HashMap面试要点; 适合初学者学习以及面试使用