摘要: 对于 类大家可能会比较陌生,平时用的也比较少,对他的印象可能仅停在面试的时候查看引用相关的知识点;但在仔细查看源码后发现 还是非常实用的,平时我们使用的类都是强引用的,它的回收完全依赖于 GC;但是对于有些类我们想要自己控制的时候就比较麻烦,比如我想在内存还足够的时候就保留,不够的时候就回收,这时使 阅读全文
posted @ 2019-01-30 11:17 三枣 阅读(1439) 评论(0) 推荐(2) 编辑
摘要: `LinkedHashMap HashMap+LinkedList`,提供了顺序访问的功能;所以在看这篇博客之前最好先看一下我之前的两篇博客, "HashMap 相关" 和 "LinkedList 相关" ; 一、整体结构 1. 定义 从上述定义中也能看到 其实就是继承了 ,并加了双向链表记录顺序, 阅读全文
posted @ 2019-01-21 09:50 三枣 阅读(715) 评论(0) 推荐(1) 编辑
摘要: 一、描述 关于 Java 连等赋值,例如 我们知道它是从右往左依次赋值的,其结果大致可以拆分为 ,但是当栈中没有持有变量的引用时,则会出现问题,例如: 如果将以上 拆分后: 二、分析 1. 初始情况 2. 拆分的赋值 首先 指向 ; 然后 指向 自身,形成闭环 所以结果打印 ,这里很容易理解 3. 阅读全文
posted @ 2019-01-16 17:09 三枣 阅读(4240) 评论(1) 推荐(2) 编辑
摘要: `HashMap HashMap`效率要高于以往的所有版本,本文会详细介绍相关的优化,但是主要还是写 JDK8 的源码。 一、整体结构 1. 类定义 可以看到 是完全基于 接口实现的,其中 是`Map Map`接口的最小实现。 看名字也能猜到,他是基于哈希表实现的(数组+链表+红黑树): 2. 构造 阅读全文
posted @ 2019-01-09 16:28 三枣 阅读(1211) 评论(4) 推荐(3) 编辑
摘要: `LinkedList`的源码大致分三个部分,双向循环链表的实现、List的API和Deque的API。 一、定义 从类定义和图中也能很清晰的看到, 的结构大致分为三个部分;同时和 相比,他并没有实现 接口,所以他并不支持随机访问操作;另外可以看到他的 接口是通过 实现的,同时还实现了多个迭代器,表 阅读全文
posted @ 2018-12-26 17:20 三枣 阅读(445) 评论(0) 推荐(0) 编辑
摘要: `ArrayList`的源码其实比较简单,所以我并没有跟着源码对照翻译,文本只是抽取了一些我觉得有意思或一些有疑惑的地方分析的。 一、成员变量 其中 被声明为了 ,那么ArrayList是如何实现序列化的呢? 查看 和`readObject`的源码如下: 可以看到在 之后又判断了他的 类型是不是 , 阅读全文
posted @ 2018-12-21 15:41 三枣 阅读(581) 评论(0) 推荐(1) 编辑
摘要: 在深入了解 Array 之前,一直以为 Array 比较简单,但是深入了解后才发现其实挺复杂的。所以我把重要的写在最前面,但凡遇到和语言本身相关的问题,都可以查阅 "Java Language and Virtual Machine Specifications" 一、Array 是一个是对象吗? 阅读全文
posted @ 2018-12-10 20:42 三枣 阅读(546) 评论(0) 推荐(0) 编辑
摘要: ​在此之前有无数次下定决心要把JDK的源码大致看一遍,但是每次还没点开就已被一个超链接或者其他事情吸引直接跳开了。直到最近突然意识到,因为对源码的了解不深导致踩了许多莫名其妙的坑,所以再次下定决心要把常用的类全部看一遍。。。 一. 声明和成员变量(不可变性) String的大部分操作都是围绕 这个字 阅读全文
posted @ 2018-11-28 12:45 三枣 阅读(582) 评论(0) 推荐(0) 编辑