Java源码
萌果爱吃芒果
身在井隅,心向璀璨。
展开
-
HashSet、TreeSet 源码解析
HashSet、TreeSet 源码解析HashSet、TreeSet 两个类是在 Map 的基础上组装起来的类,我们学习的侧重点,主要在于 Set 是如何利用 Map 现有的功能,来达成自己的目标的,也就是说如何基于现有的功能进行创新,然后再看看一些改变的小细节是否值得我们学习。一:HashSet1.1、HashSet 类注释看源码,首先要看类注释,我们看看类注释上面都说了什么,部分截图如下图所示:类注释主要讲了以下四点底层实现基于 HashMap,所以迭代时不能保证按照插入顺序,或者其它原创 2020-08-17 13:51:39 · 86 阅读 · 0 评论 -
Map 源码面试题总结
Map 源码面试题总结Map 在面试中,占据了很大一部分的面试题目,其中以 HashMap 为主,这些面试题目有的可以说得清楚,有的很难说清楚。一:Map 整体数据结构类问题1.1:说一说 HashMap 底层数据结构答:HashMap 底层是数组 + 链表 + 红黑树的数据结构,数组的主要作用是方便快速查找,时间复杂度是 O(1),默认大小是 16,数组的下标索引是通过 key 的 hashcode 计算出来的,数组元素叫做 Node,当多个 key 的 hashcode 一致,但 key 值不同原创 2020-08-12 10:03:26 · 163 阅读 · 0 评论 -
TreeMap 和 LinkedHashMap 核心源码解析
TreeMap 和 LinkedHashMap 核心源码解析在熟悉 HashMap 之后,现在我们来看下 TreeMap 和 LinkedHashMap,看看 TreeMap 是如何根据 key 进行排序的,LinkedHashMap 是如何用两种策略进行访问的。一:基础知识在了解 TreeMap 之前,我们来看下日常工作中排序的两种方式,作为我们学习的基础储备,两种方式分别为:实现 Comparable 接口;利用外部排序器 Comparator 进行排序;现在我们来看下这两种排序方式的代原创 2020-08-10 15:25:39 · 143 阅读 · 0 评论 -
HashMap 源码解析
HashMap 源码解析HashMap 源码很长,面试的问题也非常多,但这些面试问题,基本都是从源码中衍生出来的,所以我们只需要弄清楚其底层实现原理,回答这些问题就会游刃有余。一:整体架构1.1、HashMap结构HashMap 底层的数据结构主要是:数组 + 链表 + 红黑树。其中当链表的长度大于等于 8 时,链表会转化成红黑树,当红黑树的大小小于等于 6 时,红黑树会转化成链表,整体的数据结构如下:图中左边竖着的是 HashMap 的数组结构,数组的元素可能是单个 Node,也可能是个链表,原创 2020-08-08 11:05:05 · 106 阅读 · 0 评论 -
Arrays、Collections、Objects 常用方法源码解析
Arrays、Collections、Objects 常用方法源码解析ArrayList 我们几乎每天都会使用到,但是通常情况下我们只是知道如何去使用,至于其内部是怎么实现的我们不关心,但是有些时候面试官就喜欢问与ArrayList 的源码相关的问题,今天我们就来看看和ArrayList 源码相关的问题。一:整体架构1.1、ArrayList 结构ArrayList 整体架构比较简单,就是一个数组结构,比较简单,如下图:图中展示是长度为 n 的数组,index 表示数组的下标,从 0 开始计数,原创 2020-08-06 14:25:56 · 141 阅读 · 0 评论 -
Java 常用关键字理解
Java 常用关键字理解Java 中的关键字很多,大约有 50+,在命名上我们不能和这些关键字冲突的,编译会报错,每个关键字都代表着不同场景下的不同含义,接下来我们挑选几个比较重要的关键字,深入学习一下。一:staticstatic 意思是静态的、全局的,一旦被修饰,说明被修饰的东西在一定范围内是共享的,谁都可以访问,这时候需要注意并发读写的问题。1.1、修饰的对象static 只能修饰类变量、方法和方法块。1)、修饰类变量当 static 修饰类变量时,如果该变量是 public 的话,表示原创 2020-08-04 15:44:22 · 170 阅读 · 0 评论 -
String 不变性、Long 缓存源码解析和面试题
String 不变性、Long 缓存源码解析和面试题String 和 Long 大家都很熟悉,现在我们结合实际的工作场景,来一起看下 String 和 Long 的底层源码实现,看看平时我们使用时,有无需要注意的点,总结一下这些 API 都适用于哪些场景。一:String1.1、不变性我们常常看到这样的面试题:请简单的说说 String、StringBuilder 和StringBuffer 三者之间的区别。其中 String 就有一点与其他两者不一样的地方,那就是String值一旦被初始化,就不能原创 2020-08-03 14:53:29 · 169 阅读 · 0 评论 -
List 源码面试题总结
List 源码面试题总结List 作为工作中最常见的集合类型,在面试过程中,也是经常会被问到各种各样的面试题,一般来说,只要你看过源码,心中对 List 的总体结构和细节有所了解的话,基本问题都不大。1、面试题1.1、 说说你对 ArrayList 的理解?很多面试官喜欢这种问法,主要是考察面试同学对 ArrayList 有没有总结经验,介于 ArrayList 内容很多,建议先回答总体架构,再从某个细节出发作为突破口,比如这样:ArrayList 底层数据结构是个数组,其 API 都做了一层对数原创 2020-08-02 22:12:25 · 192 阅读 · 0 评论 -
LinkedList 源码解析和设计思路
LinkedList源码分析和ArrayList一样,LinkedList 也是处理集合的,但是从名字就可以看出来两者的不同,前者底层的实现是基于数组实现的,后者是基于链表实现的。LinkedList更适用于集合元素先入先出和先入后出的场景,在队列源码中被频繁使用。一:整体架构1.1、LinkedList 结构LinkedList 底层数据结构是一个双向链表,整体结构如下图所示:上图代表了一个双向链表结构,链表中的每个节点都可以向前或者向后追溯,从以上结构中我们可以看出:first 是双向链原创 2020-07-31 22:09:53 · 129 阅读 · 0 评论 -
ArrayList 源码解析和设计思路
Arraylist源码分析ArrayList 我们几乎每天都会使用到,但是通常情况下我们只是知道如何去使用,至于其内部是怎么实现的我们不关心,但是有些时候面试官就喜欢问与ArrayList 的源码相关的问题,今天我们就来看看和ArrayList 源码相关的问题。一:整体架构1.1、ArrayList 结构ArrayList 整体架构比较简单,就是一个数组结构,比较简单,如下图:图中展示是长度为 n 的数组,index 表示数组的下标,从 0 开始计数,elementData 表示数组本身,源码中原创 2020-07-30 15:33:05 · 250 阅读 · 0 评论