Stack类也是List接口的一种实现,也是一个有着非常长历史的实现,从jdk1.0开始就有了这个实现. Stack是一种基于后进先出队列的实现(last-in-first-out (LIFO)),实际上jdk也提供了有关队列的其他实现,这里就先看看Stack的实现: 类定义: public class Stack<E> extends Vector<E> { //从类定义看,Stack是线程安全的 ..... } 看看Stack提供的一些CRUD方法: /** * Pushes…
Vector是List接口的另一实现,有非常长的历史了,从jdk1.0开始就有Vector了,先于ArrayList出现,与ArrayList的最大区别是:Vector 是线程安全的,简单浏览一下Vector: 类定义: public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable Vector支持快速随机访…
工作中每天都会和java集合打交道,虽然以前也看过jdk源码的实现,但有些东西时间长了还是会遗忘,或者有些实现在新版本中有了新的变化,俗话说"温故而知新",所以打算再阅读一下相关源码. java集合包含collection接口的子接口和实现类以及Map接口的子接口和实现两大块,首先先看看这两大块大致内容: Collection接口的子接口及实现: Map接口的子接口及实现:…
ArrayBlockingQueue是一个先进先出线程安全的队列,队列头部是进入队列时间最长的元素,队尾是进入队列时间最短的元素,同时队列的最大容量是固定的. 先看类定义: public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { ...... } ArrayBlockingQueue实现了Blocking…
先看看类定义: public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { ....... } LinkedList与ArrayList相比,LinkedList不再实现RandomAccess接口,表明不支持快速随机访问数据,但实现了Deque接口,可当队列使用,Deq…
ArrayList是jdk1.2开始新增的List实现,首先看看类定义: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { ........... } ArrayList实现List接口,上层接口是Collection,顶级接口是Iterable,同时还实现了Cloneable.Seri…
一.前言 今天我们来看一下本次集合源码阅读里的最后一个Map--IdentityHashMap.这个Map之所以放在最后是因为它用到的情况最少,也相较于其他的map来说比较特殊.就笔者来说,到目前为止还没有用到过它 ┐(゚-゚)┌.它的罕见与它的用途有关,当时的Map设计者是这么说的: This class is designed for use only in the rare cases wherein reference-equality semantics are required. 这…
一.前言 今天开始阅读jdk1.8的集合部分,平时在写项目的时候,用到的最多的部分可能就是Java的集合框架,通过阅读集合框架源码,了解其内部的数据结构实现,能够深入理解各个集合的性能特性,并且能够帮助自己在今后的开发中避免犯一些使用错误.另外笔者自己也是摸着石头过河,如果有描述不当的地方,希望园友们能够不吝指出,希望能够和大家共同进步! 二.集合框架概览图 可以看到集合的基础接口是Map, Collection以及Iterator.其余的类都实现自这3个类. 虚线箭头:依赖(即指向类里面包含了…
一.前言 笔者之前看过一篇关于jdk1.8的HashMap源码分析,作者对里面的解读很到位,将代码里关键的地方都说了一遍,值得推荐.笔者也会顺着他的顺序来阅读一遍,除了基础的方法外,添加了其他补充内容. 二.HashMap结构概览 以下是HashMap的数据结构: 不同于之前的jdk的实现,1.8采用的是数组+链表+红黑树,在链表过长的时候可以通过转换成红黑树提升访问性能.大多数情况下,结构都以链表的形式存在,所以检查是否存在树节点会增加访问方法的时间,但是相较于其优点来说还是可以接受的. 三.…
一.前言 在前面几篇,我们已经学习了常见了Map,下面开始阅读实现Collection接口的常见的实现类.在有了之前源码的铺垫之后,我们后面的阅读之路将会变得简单很多,因为很多Collection的结构与Map的类似,甚至有不少是直接用了Map里的方法.接下来让我们一起来看一下ArrayList的源码. 二.ArrayList结构概览 顾名思义,ArrayList的结构实际就是一个Object[].所以它的特性很明显,插入一个元素的时候,是耗时是一个常量时间O(1),在插入n个元素的时候,需要的…