jdk源码
文章平均质量分 78
柒间
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JDK7中ConcurrentHashMap源码解析
ConcurrentHashMap 数据结构 ConcurrentHashMap的数据结构与HashMap基本类似, 区别在于: 1、内部在数据写入时加了同步机制(分段锁)保证线程安全,读操作是无锁操作; 2、扩容时老数据的转移是并发执行的,这样扩容的效率更高 ConcurrentHashMap 线程安全的具体实现方式 JDK 1.7 ConcurrentHashMap基于ReentrantLock实现分段锁 将数据分为一段一段的存储,然后给每一段数据配一把锁,底层数据结构:Segment 数组 + Has原创 2022-04-25 22:32:54 · 982 阅读 · 0 评论 -
JDK7 HashMap源码解析
为什么HashMap中在链表与数组的选择时选择了数组? 因为使用链表的话访问查询会比较低(get方法),在ArrayList中可以直接使用下表来获取数据,但是链表需要一个位置一个位置遍历来查询。 在HashMap中get和put使用的频率都是非常的高的,所以我们也需要同时去保证他们的效率。 JDK 1.8 前 : 数组 + 链表 put方法: ● 通过 key 的 hashCode 经过 扰动函数(hash()) 处理过后得到 hash 值 ● 通过 (n - 1) & hash (高效的求余数的办原创 2022-04-23 00:29:11 · 322 阅读 · 0 评论 -
为什么HashMap的数组长度是2的幂
为什么HashMap的长度一定是2的次幂呢? 今天和朋友聊天被问到HashMap的数组长度为什么是2的倍数。说实话挺惭愧的,秋招结束了,还不能完整的给出一个完整的答案。 我知道了HashMap的数据结构,也知道了什么是Hash冲突,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的eq原创 2021-11-25 08:52:45 · 2419 阅读 · 0 评论 -
JDK1.7与JDK1.8中HashMap的扩容
基础知识 注意 Java中散列表用链表数组实现,每个链表被称为桶,想要查找表中对象的位置,就要先计算它的散列码,然后与桶的总数取余数,所得到的结果就是保存这个元素桶的索引。 hash:翻译为”散列表“,就是把任意长度的输入,通过散列算法,变成固定长度输出,该输出结果是散列值。这种转换是一种压缩映射,散列表的空间通常小于输入的空间,不同的输入可能会散列成相同的输出,所以不能从散列表来唯一的确定输入值。 hash冲突:就是根据key即经过一个函数f(key)得到的结果的作为地址去存放当前的key value原创 2021-10-31 17:31:09 · 2162 阅读 · 0 评论 -
自动装箱与自动拆箱
自动装箱与自动拆箱给我们开发提供了很多的便利,在jdk 1.5中,自动装箱首次被引入。而在jdk 1.5之前,如果你想要定义一个value为100的Integer对象,则需要通过new出来。 断点跟踪 为了能够了解,自动装箱与自动拆箱的过程,我们打上断点一步步跟踪看看自动装箱的过程。 自动装箱 接下来抬到了Integer的valueOf(int i)方法,当然我这里设置的数是在==[-128,127]==之中,一会在对范围之外的数据进行跟踪。 下一步, 紧接着我们继续执行,之后就跳出了该方法 于是通原创 2021-07-20 20:28:59 · 164 阅读 · 2 评论 -
Integer源码阅读
对于java自动装箱与自动拆箱我目前只停留在知道使用的层面上,为了能够进一步的对其进行深入的研究,下面从源码开始对其进行分析。 分析类 最首先的当然是从类的继承实现情况开始。 public final class Integer extends Number implements Comparable<Integer> {...} 对与这个Integer类,它实现了Comparable接口,继承了Number. Comparatable : 强行对实现它的类的每个实例进行自然排序,该接口的唯原创 2021-07-20 19:23:25 · 220 阅读 · 1 评论
分享