ArrayList源码浅析(jdk1.8)】的更多相关文章

ArrayList概述   1. ArrayList是可以动态扩容和动态删除冗余容量的索引序列,基于数组实现的集合.  2. ArrayList支持随机访问.克隆.序列化,元素有序且可以重复.  3. ArrayList初始默认长度10,超出扩容1.5倍,使用Object[]存储各种数据类型. ArrayList数据结构   数据结构是集合的精华所在,数据结构往往也限制了集合的作用和侧重点,了解各种数据结构是我们分析源码的必经之路.  ArrayList的数据结构如下: ArrayList源码分…
一.概述 本篇文章记录通过阅读JDK1.8 ArrayList源码,结合自身理解分析其实现原理. ArrayList容器类的使用频率十分频繁,它具有以下特性: 其本质是一个数组,因此它是有序集合 通过 get(int i) 下标获取数组的指定元素时,时间复杂度是O(1) 通过 add(E e)插入元素时,可直接向当前数组最后一个位置插入(这个描述不是特别准确,其中涉及到扩容.后续将讲解),其时间复杂度为O(1) 通过 add(int i, E e)向指定位置插入元素时,是在原数组的基础上通过拷贝…
什么是ArrayList? ArrayList是存储一组数据的集合,底层也是基于数组的方式实现,实际上也是对数组元素的增删改查:它的主要特点是: 有序:(基于数组实现) 随机访问速度快:(进行随机访问的时候,只需要遍历所有的数组) 可以为null;(基于数组实现) 元素可以重复:(基于数组实现) 线程是不安全的:(对于多个线程访问时,没有进行同步操作,之所以不安全也是为它的性能而设计,如果需要创建一个安全的ArrayList集合可以通过 Collections.synchronizedList(…
ArrayList的实质就是动态数组.所以可以通过下标准确的找到目标元素,因此查找的效率高.但是添加或删除元素会涉及到大量元素的位置移动,所以效率低. 一.构造方法 ArrayList提供了3个构造方法 1.无参的,就是把表示集合的数组赋值为空. public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 2.带初始化大小的构造方法,就是new一个指定大小的数组赋值给表示集合的数组. public Ar…
◆ ArrayList简介 ◆ ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口. AbstractList.List提供了添加.删除.修改.遍历等功能. RandmoAccess提供了随机访问功能 Cloneable提供了可以被克隆的功能 Serializable提供了序列化的功能 和Vector…
注:以下源码均为JDK8的源码 一. 核心属性 基本属性如下: 核心的属性其实是红框中的两个: //从注释也容易看出,一个是集合元素,一个是集合长度(注意是逻辑长度,即元素的个数,而非数组长度) 其中:transient指明序列化时请忽略.  二.构造器 一共有3个构造器: 1.构造指定容量的ArrayList 2.默认构造器 //可以看到,默认初始容量为10(基本属性中的DEFAULT_CAPACITY) 而 DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一个空数组,所有…
工作快一年了,近期打算研究一下JDK的源码,也就因此有了死磕java系列 ArrayList 是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口. ArrayList 继承了AbstractList,实现了List.它是一个数组队列,提供了相关的添加.删除.修改.遍历等功能. ArrayList 实现了RandmoAcce…
参考:http://www.cnblogs.com/xrq730/p/4989451.html(借鉴的有点多,哈哈) 首先介绍ArrayList的特性: 1.允许元素为空.允许重复元素 2.有序,即插入顺序和访问顺序一致 3.非同步 ArrayList实现原理为动态数组 首先看构造方法: public ArrayList(int initialCapacity) { super(); ) throw new IllegalArgumentException("Illegal Capacity:…
ArrayList 是一个动态数组,线程不安全 ,允许元素为null. ArrayList的数据结构是数组,查询比较方便. ArrayList类的接口 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ RandomAccess:RandmoAccess是一个标记接口,用于被List相关类实…
//定义一个默认的长度10 private static final int DEFAULT_CAPACITY = 10; //定义空的数组 private static final Object[] EMPTY_ELEMENTDATA = {}; //定义数组用来存储放入ArrayList的元素 private transient Object[] elementData; //定义记录ArrayList中元素的个数 private int size; //构造方法--创建指定长度的数组的Ar…