ArrayList源码分析--jdk1.8
2019-08-02 17:30
2361 查看
ArrayList概述
1. ArrayList是可以动态扩容和动态删除冗余容量的索引序列,基于数组实现的集合。
2. ArrayList支持随机访问、克隆、序列化,元素有序且可以重复。
3. ArrayList初始默认长度10,使用Object[]存储各种数据类型。
ArrayList数据结构
数据结构是集合的精华所在,数据结构往往也限制了集合的作用和侧重点,了解各种数据结构是我们分析源码的必经之路。
ArrayList的数据结构如下:
ArrayList源码分析
/* * 用数组实现的集合,支持随机访问,元素有序且可以重复 * RandomAccess(ArrayList) 支持快速随机访问,使用for循环更加快速 * LinkedList 使用 iterator迭代器更加 快速 * RandomAccess 这是一个标记接口,一般此标记接口用于 List 实现,以表明它们支持快速(通常是恒定时间)的随机访问。 * 该接口的主要目的是允许通用算法改变其行为,以便在应用于随机或顺序访问列表时提供良好的性能 */ public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { /** * 默认长度 10 */ private static final int DEFAULT_CAPACITY = 10; /** * 默认空的数组 */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * ArrayList中的元素 是Object[]类型的数组 */ transient Object[] elementData; // non-private to simplify nested class access /** * 动态数组的实际大小 ,默认为0 * @serial */ private int size; /** * 集合长度构造函数 */ public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; } /** * 无参构造函数,设置元素数组为空 注意此时初始容量是0,而不是大家以为的 10 */ public ArrayList() { super(); this.elementData = EMPTY_ELEMENTDATA; } /** * 集合参数构造函数 */ public ArrayList(Collection<? extends E> c) { elementData = c.toArray(); // 转化为数组 size = elementData.length; // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class) //是否成功转化为Object类型数组 elementData = Arrays.copyOf(elementData, size, Object[].class); //不为Object数组的话就进行复制 }
ArrayList继承和实现分析
ArrayList extends AbstractList
AbstractList extends AbstractCollection
所有类都继承Object 所以ArrayList的继承结构就是上图这样。
相关文章推荐
- ArrayList源码分析(JDK1.8)
- Java容器深入研究(jdk 1.8)--- ArrayList总结与源码分析
- JDK 1.8 ArrayList源码分析
- java基础提高篇--集合源码分析--jdk1.8 ArrayList源码
- 【集合框架】JDK1.8源码分析之ArrayList(六)
- java容器源码分析--ArrayList(JDK1.8)
- Java -- 基于JDK1.8的ArrayList源码分析
- 【JUC】JDK1.8源码分析之CopyOnWriteArrayList(六)
- ArrayList源码分析(jdk1.8)
- 【集合框架】JDK1.8源码分析之ArrayList(六)
- ArrayList源码分析(jdk1.8)
- ArrayList源码分析(JDK1.8)
- ArrayList源码分析(基于JDK1.8)
- ArrayList源码分析(JDK1.8)
- ArrayList源码分析 JDK1.8
- ArrayList源码分析(JDK1.8)
- ArrayList源码分析(基于JDK1.8)
- 基于jdk1.8的ArrayList源码分析
- java中的ArrayList集合源码分析(jdk1.8版本)。
- HashMap 源码分析(JDK1.8)