JDK 1.8源码阅读 ArrayList】的更多相关文章

一,前言 ArrayList是Java开发中使用比较频繁的一个类,通过对源码的解读,可以了解ArrayList的内部结构以及实现方法,清楚它的优缺点,以便我们在编程时灵活运用. 二,ArrayList结构 如上图所示:ArrayList是一种线性数据结构,它的底层是用数组实现的,相当于动态数组.与Java中的数组相比,它的容量能动态增长.类似于C语言中的动态申请内存,动态增长内存. 当创建一个数组的时候,就必须确定它的大小,系统会在内存中开辟一块连续的空间,用来保存数组,因此数组容量固定且无法动…
一.前言 在前面几篇,我们已经学习了常见了Map,下面开始阅读实现Collection接口的常见的实现类.在有了之前源码的铺垫之后,我们后面的阅读之路将会变得简单很多,因为很多Collection的结构与Map的类似,甚至有不少是直接用了Map里的方法.接下来让我们一起来看一下ArrayList的源码. 二.ArrayList结构概览 顾名思义,ArrayList的结构实际就是一个Object[].所以它的特性很明显,插入一个元素的时候,是耗时是一个常量时间O(1),在插入n个元素的时候,需要的…
根据 一篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础” 的指引,决定开始阅读下JDK源码. 本文将作为源码阅读总纲 一.精读部分 java.io java.lang java.util 随笔列表: 二.深刻理解部分 java.lang.reflect java.net javax.net.* java.nio.* java.util.concurrent.* 随笔列表: 三.JVM研究部分 四.JAVA调试工具部分…
一,前言 TreeMap:基于红黑树实现的,TreeMap是有序的. 二,TreeMap结构 2.1 红黑树结构 红黑树又称红-黑二叉树,它首先是一颗二叉树,它具体二叉树所有的特性.同时红黑树更是一颗自平衡的排序二叉树.我们知道一颗基本的二叉树他们都需要满足一个基本性质--即树中的任何节点的值大于它的左子节点,且小于它的右子节点.按照这个基本性质使得树的检索效率大大提高.我们知道在生成二叉树的过程是非常容易失衡的,最坏的情况就是一边倒(只有右/左子树),这样势必会导致二叉树的检索效率大大降低(O…
一,前言 HashMap实现了Map的接口,而Map的类型是成对出现的.每个元素由键与值两部分组成,通过键可以找对所对应的值.Map中的集合不能包含重复的键,值可以重复:每个键只能对应一个值. 存储数据采用的哈希表结构,元素的存取顺序不能保证一致.由于要保证键的唯一.不重复,需要重写键的hashCode()方法.equals()方法.Map接口中的集合都有两个泛型变量<K,V>,在使用时,要为两个泛型变量赋予数据类型.两个泛型变量<K,V>的数据类型可以相同,也可以不同. 二,Ha…
一,前言 类实现Set接口,由哈希表支持(实际上是一个 HashMap集合).HashSet集合不能保证的迭代顺序与元素存储顺序相同.HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法. 二,HashSet结构 2.1 什么是哈希表 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把这…
一,前言 LinkedList是一个实现了List接口和Deque接口的双端链表.有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链表头部,这取决于看索引更靠近哪一端. LinkedList不是线程安全的. 二,LinkList结构 LinkList内部是一个双向列表的结构,如下图所示. 三,LinkList源码阅读 3.1 LinkList的继承关系 从继承关系可以看出,LinkedList不但继承了List接口同时也继承了Queue接口. 3.2 LinkedList的构造方…
序 如同C语言中字符数组向String过渡一样,作为面向对象语言,自然而然的出现了由Object[]数据形成的集合.本文从JDK源码出发简单探讨一下ArrayList的几个重要方法. Fields //序列化Id保证了集合是可以进行RPC通信的 private static final long serialVersionUID = 8683452581122892189L; //作为一个普通Object[]数组,集合的默认长度是10 private static final int DEFAU…
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable ArrayList继承了AbstractList抽象类,实现了List.RandomAccess.Cloneable.Serializable接口.ArrayList的默认初始容量为10,阅读源码可知--底层数据结构是数组.添加的元素是可以重…
1简介 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable ArrayList使用一个可变数组实现List接口,实现了List接口的所有可选操作.ArrayList除了是非线程安全的之外,其他的与Vector类似. 2成员属性 //序列化版本号 private static final lon…