概述 上一篇我们介绍了ArrayList,我们知道它的底层是基于数组实现的,提到数组,我们就马上会想到它的兄弟链表,今天我们要介绍的LinkedList就是基于链表实现的。 继承结构 public class Linke…
标签:java集合源码分析
JAVA常用集合源码分析:HashMap
我们这篇文章就来试着分析下 HashMap 的源码,由于 HashMap 底层涉及到太多方面,一篇文章总是不能面面俱到,所以我们可以带着面试官常问的几个问题去看源码: 了解底层如何存储数据的 HashMap 的几个主要方…
JAVA常用集合源码分析:HashSet
序言 在上一篇文章中,我们介绍了HashMap,其实本来想自己完成源码分析的一系列文章的,但是HashMap的源码着实是复杂,看的我脑壳疼。。于是就自己去找了找大牛们的文章反复看,后面总算有了点门道了,大致知道了Hash…
Java集合源码分析之开篇
初衷 Java集合是我们使用最频繁的工具,也是面试的热点,但我们对它的理解仅限于使用上,而且大多数情况没有考虑过其使用规范。本系列文章将跟随源码的思路,分析实现的每个细节,以期在使用时避免各种不规范的坑。在这里,我们会惊…
Java集合源码分析之基础(一):数组与链表
数组和链表是数据结构中最基本的部分,也是其余众多数据结构的基础。即使在Java中,这两种结构使用的也很普遍。这里我们会先对它们进行简要分析。 数组 在java中,数组定义为一种基本类型,其可以通过下标获取到对应位置的数据…
Java集合源码分析之基础(二):哈希表
无论是数组还是链表,其对数据的查询表现都比较无力,要想知道一个元素是否在数组或链表中,只能从前向后挨个对比。出现这个问题的根源在于,我们没有办法直接根据一个元素找到它存储的位置,那有没有办法消除这个对比的过程呢? 哈希表…
Java集合源码分析之List(一):超级接口List
List是Collection三大直接子接口之一,其中的数据可以通过位置检索,用户可以在指定位置插入数据。List的数据可以为空,可以重复。以下是其文档注释,只看前两段: An ordered collection (a…
Java集合源码分析之List(二):ArrayList
做了这么多准备,终于到了ArrayList了,ArrayList是我们使用最为频繁的集合类了,我们先看看文档是如何介绍它的: Resizable-array implementation of the List inte…
Java集合源码分析之Queue(一):超级接口Queue
在日常生活中,排队几乎随处可见,上地铁要排队,买火车票要排队,就连出门吃个大餐,也要排队。。。之前研究的ArrayList就像是一个缺乏管理的排队系统。大家虽然会排队,但一会走个人,大家向前挪一挪,一会插个人,大家向后挪…
Java集合源码分析之Queue(二):接口Deque
Deque全称为double ended queue,即双向队列,它允许在两侧插入或删除元素,同时也建议我们不要向其中插入null值。除此之外,其余特性则和父级Queue类似。Deque大多数情况下不会限制元素的数量,但…
Java集合源码分析之Queue(三):ArrayDeque
在介绍了Queue与Deque概念之后,这是要进行分析的第一个实现类。ArrayDeque可能大家用的都比较少,但其实现里有许多亮点还是值得我们关注的。 Deque的定义为double ended queue,也就是允许…
Java集合源码分析之LinkedList
分析完了List与Queue之后,终于可以看看LinkedList的实现了。LinkedList弥补了ArrayList增删较慢的问题,但在查找方面又逊色于ArrayList,所以在使用时需要根据场景灵活选择。对于这两个…