摘要: 本文将主要结合源码讲述 ThreadLocal 的使用场景和内部结构,以及 ThreadLocalMap 的内部结构;另外在阅读文本之前只好先了解一下引用和 HashMap 的相关知识,可以参考 "Reference 框架概览" 、 "Reference 完全解读" 、 "HashMap 相关" ;阅读全文
posted @ 2019-03-15 11:03 三枣 阅读(246) 评论(0) 编辑
摘要: 本文主要结合 源码,梳理 Java 线程的整体脉络; 一、线程概述 对于 Java 中的线程主要是依赖于系统的 API 实现的,这一点可以从 ;源码中关键的方法都是 方法看出,也可以直接查看 OpenJDK 源码看出来,这一点后面还会讲到;对于 JDK1.8 而言,他的 Windows 版和 Lin阅读全文
posted @ 2019-03-14 10:36 三枣 阅读(251) 评论(0) 编辑
摘要: 本文将主要讲述平衡二叉树中的红黑树,红黑树是一种我们经常使用的树,相较于 AVL 树他无论是增加还是删除节点,其结构的变化都能2018最新注册送白菜在常树次;在 JDK 中的 TreeMap 同样也是使用红黑树实现的; 一、结构概述 红黑树是在AVL 树平衡条件的基础上,进一步放宽条件,从而使得红黑树在动态变化的时候阅读全文
posted @ 2019-03-11 11:38 三枣 阅读(235) 评论(0) 编辑
摘要: 本文将主要讲述另一种树形结构, B 树 ;B 树是一种 多路平衡查找树 ,但是可以将其理解为是由二叉查找树合并而来;它主要用于在不同存储介质之间查找数据的时候,减少 I/O 次数(因为一次读一个节点,可以读取多个数据); 一、结构概述 B 树,多路平衡查找树,即有多个分支的查找树;如图所示: B 树阅读全文
posted @ 2019-03-07 16:41 三枣 阅读(163) 评论(0) 编辑
摘要: 本文将主要讲述 BBST 家族的另一种相对奇特的树, 伸展树 ;伸展树的相较于其他的 BBST,结构更加简单,因为伸展树不需要平衡因子、颜色等信息,他的节点就是 BST 的节点,同时他甚至没有时刻维护全树的平衡状态,却仍然能保持各项操作达到分摊 ; 一、结构概述 伸展树的结构和二叉树完全相同,只是在阅读全文
posted @ 2019-03-05 14:19 三枣 阅读(115) 评论(0) 编辑
摘要: 本文将主要讲解平衡二叉树中的 AVL 树,其中将重点讲解二叉树的重平衡方法,即左旋和右旋,以及 3+4 重构;这些方法都是后面要讲的 B 树,红黑树等 BBST 的重要基础;此外在看本文之前最好先看一下 "二叉搜索树" ; 一、结构概述 前一篇博客里面讲了,二叉树同时具有 向量的静态查找 和 列表的阅读全文
posted @ 2019-03-02 22:44 三枣 阅读(117) 评论(0) 编辑
摘要: 本文将主要以动图方式展示二叉搜索树的结构,以及动态操作;但是对于基本的概念和性质则不会有过多的提及,如果想系统了解建议查看邓俊辉老师的《数据结构》课程; 一、结构概述 二叉树:融合了 向量的静态操作 (二分查找)和 列表的动态操作 (插入和删除)的优点;使得树成了应用广泛的数据结构; 二叉搜索树:即阅读全文
posted @ 2019-02-27 17:01 三枣 阅读(248) 评论(0) 编辑
摘要: 对于泛型的使用我想大家都非常熟悉,但是对于类型擦除,边界拓展等细节问题,可能不是很清楚,所以本文会重点讲解一下;另外对泛型的了解其实可以看出,一个语言特性的产生逻辑,这对我们平时的开发也是非常有帮助的; 一、为什么会出现泛型 首先泛型并不是Java的语言特性,是直到 JDK1.5 才支持的特性(具体阅读全文
posted @ 2019-02-21 20:24 三枣 阅读(249) 评论(0) 编辑
摘要: 本文的目的并不是让你对 更加了解,然后灵活运用;因为 的一个历史遗留的类,目前并不建议使用,所以本文主要和 对比,感受同样功能的不同实现,知道什么是好的代码;所以在阅读本文之前最好先了解一下 ,可以参考 "HashMap 相关" ; 一、 类定义 可以看到它和 虽然都是哈希表,但是结构完全不一样,他阅读全文
posted @ 2019-02-13 20:48 三枣 阅读(174) 评论(0) 编辑
摘要: 平时我们使用最多的数据结构肯定是 HashMap,但是在使用的时候我们必须知道每个键值对的生命周期,并且手动清除它;但是如果我们不是很清楚它的生命周期,这时候就比较麻烦;通常有这样几种处理方式: 由一个线程定时处理,可以是 或者 ; 利用重写 ,实现 FIFOCache 或者 LRUCache;可以阅读全文
posted @ 2019-02-12 21:14 三枣 阅读(201) 评论(0) 编辑
摘要: 在阅读本文之前最好对 Reference 框架有一个整体的把握,可以参考我上一篇博客 "Reference 框架概览" ;本文主要讲了 的子类实现和应用( ); Java 引用的强弱关系 : 一、StrongReference 强引用 :我们通常使用的引用,形如 此时从 stack 中的 o,到 h阅读全文
posted @ 2019-01-31 18:36 三枣 阅读(189) 评论(0) 编辑
摘要: 对于 类大家可能会比较陌生,平时用的也比较少,对他的印象可能仅停在面试的时候查看引用相关的知识点;但在仔细查看源码后发现 还是非常实用的,平时我们使用的类都是强引用的,它的回收完全依赖于 GC;但是对于有些类我们想要自己2018最新注册送白菜的时候就比较麻烦,比如我想在内存还足够的时候就保留,不够的时候就回收,这时使阅读全文
posted @ 2019-01-30 11:17 三枣 阅读(195) 评论(0) 编辑
摘要: `LinkedHashMap HashMap+LinkedList`,提供了顺序访问的功能;所以在看这篇博客之前最好先看一下我之前的两篇博客, "HashMap 相关" 和 "LinkedList 相关" ; 一、整体结构 1. 定义 从上述定义中也能看到 其实就是继承了 ,并加了双向链表记录顺序,阅读全文
posted @ 2019-01-21 09:50 三枣 阅读(232) 评论(0) 编辑
摘要: 一、描述 关于 Java 连等赋值,例如 我们知道它是从右往左依次赋值的,其结果大致可以拆分为 ,但是当栈中没有持有变量的引用时,则会出现问题,例如: 如果将以上 拆分后: 二、分析 1. 初始情况 2. 拆分的赋值 首先 指向 ; 然后 指向 自身,形成闭环 所以结果打印 ,这里很容易理解 3. 阅读全文
posted @ 2019-01-16 17:09 三枣 阅读(299) 评论(0) 编辑
摘要: `HashMap HashMap`效率要高于以往的所有版本,本文会详细介绍相关的优化,但是主要还是写 JDK8 的源码。 一、整体结构 1. 类定义 可以看到 是完全基于 接口实现的,其中 是`Map Map`接口的最小实现。 看名字也能猜到,他是基于哈希表实现的(数组+链表+红黑树): 2. 构造阅读全文
posted @ 2019-01-09 16:28 三枣 阅读(250) 评论(0) 编辑
摘要: `LinkedList`的源码大致分三个部分,双向循环链表的实现、List的API和Deque的API。 一、定义 从类定义和图中也能很清晰的看到, 的结构大致分为三个部分;同时和 相比,他并没有实现 接口,所以他并不支持随机访问操作;另外可以看到他的 接口是通过 实现的,同时还实现了多个迭代器,表阅读全文
posted @ 2018-12-26 17:20 三枣 阅读(174) 评论(0) 编辑
摘要: `ArrayList`的源码其实比较简单,所以我并没有跟着源码对照翻译,文本只是抽取了一些我觉得有意思或一些有疑惑的地方分析的。 一、成员变量 其中 被声明为了 ,那么ArrayList是如何实现序列化的呢? 查看 和`readObject`的源码如下: 可以看到在 之后又判断了他的 类型是不是 ,阅读全文
posted @ 2018-12-21 15:41 三枣 阅读(181) 评论(0) 编辑
摘要: 在深入了解 Array 之前,一直以为 Array 比较简单,但是深入了解后才发现其实挺复杂的。所以我把重要的写在最前面,但凡遇到和语言本身相关的问题,都可以查阅 "Java Language and Virtual Machine Specifications" 一、Array 是一个是对象吗? 阅读全文
posted @ 2018-12-10 20:42 三枣 阅读(79) 评论(0) 编辑
摘要: ​在此之前有无数次下定决心要把JDK的源码大致看一遍,但是每次还没点开就已被一个超链接或者其他事情吸引直接跳开了。直到最近突然意识到,因为对源码的了解不深导致踩了许多莫名其妙的坑,所以再次下定决心要把常用的类全部看一遍。。。 一. 声明和成员变量(不可变性) String的大部分操作都是围绕 这个字阅读全文
posted @ 2018-11-28 12:45 三枣 阅读(193) 评论(0) 编辑
博聚网