前言: 在我们平常开发中难免会用到List集合来存储数据,一般都会选择ArrayList和LinkedList,以前只是大致知道ArrayList查询效率高LinkedList插入删除效率高,今天来实测一下. 先了解一下List   List列表类,顺序存储任何对象(顺序不变),可重复.   List是继承于Collection的接口,不能实例化.实例化可以用: ArrayList(实现动态数组),查询快(随意访问或顺序访问),增删慢.整体清空快,线程不同步(非线程安全).数组长度是可变的百分之…
前言: 在我们平常开发中难免会用到List集合来存储数据,一般都会选择ArrayList和LinkedList,以前只是大致知道ArrayList查询效率高LinkedList插入删除效率高,今天来实测一下. 先了解一下List   List列表类,顺序存储任何对象(顺序不变),可重复.   List是继承于Collection的接口,不能实例化.实例化可以用: ArrayList(实现动态数组),查询快(随意访问或顺序访问),增删慢.整体清空快,线程不同步(非线程安全).数组长度是可变的百分之…
java集合系列之ArrayList源码分析(基于jdk1.8) ArrayList简介 ArrayList时List接口的一个非常重要的实现子类,它的底层是通过动态数组实现的,因此它具备查询速度快,增删速度慢的特点.另外数组拥有索引,因此可通过索引直接访问集合中的元素,ArrayList集合中允许存放重复的元素. 下面将对ArrayList集合中的重要方法的底层实现做一下简单的介绍,如有错误,请指正. ArrayList的成员变量: //序列化id private static final l…
最近忙着替公司招人好久没写了,荒废了不好意思. 上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习.首先学习List.而ArrayList又是List中最为常用的,因此本章先学习ArrayList.先对ArrayList有个整体的认识,然后学习它的源码,深入剖析ArrayList. 1. ArrayList简介 首先看看ArrayList与Collection的关系: ArrayList的继承关系如下: java.lang.O…
ArrayList 内部是由一个array 实现的. 如果你知道array 和 ArrayList 的相似点和不同点,就可以选择什么时候用array 或者使用ArrayList , array 提供 O(1)的查找性能和很基本的方式去存储数据. ArrayList 是Java集合框架类的一员,可以称它为一个动态数组.array 是静态的,所以一个数据一旦创建就无法更改他的大小. 所以, 如果需要一个数组可以重新定义他的大小,你应该使用 ArrayList, 这是array 和ArrayList的…
刚看完<数据结构与算法分析java语言描述>的第3章中的表,下面回忆下主要知识点,主要说明各列表之间的关系,以及各自的优缺点.其中牵涉到内部类和嵌套类. 1 Collection APIpublic interface Collection<AnyType> extens Iterable<AnyType> { int size(); boolean isEmpty(); void clear(); boolean contains(AnyType x); boolea…
一.JDK中ArrayList是如何实现的 1.先看下ArrayList从上而下的层次图: 说明: 从图中可以看出,ArrayList只是最下层的实现类,集合的规则和扩展都是AbstractList.List.Collection等上层的接口所设定的,而ArrayList实现或继承了上层的规则,然后重新或扩展来处理集合中的数据. 2.看看接口:Iterable<E>中都定义了那些规则? JDK1.8中的源码: package java.lang; import java.util.Iterat…
Collection List 在Collection的基础上引入了有序的概念,位置精确:允许相同元素.在列表上迭代通常优于索引遍历.特殊的ListIterator迭代器允许元素插入.替换,双向访问,从列表中的制定位置开始(根据index获取index位置的元素).未实现get方法. AbstractList 实现了List中的一些方法,支持随机访问.lastIndexOf通过特殊迭代器能够制定开始位置,从后遍历的特性来实现.直接通过指定的位置,借助特殊迭代器找到. Vector 实现可增长的数…
本篇分析ArrayList的源码,在分析之前先跟大家谈一谈数组.数组可能是我们最早接触到的数据结构之一,它是在内存中划分出一块连续的地址空间用来进行元素的存储,由于它直接操作内存,所以数组的性能要比集合类更好一些,这是使用数组的一大优势.但是我们知道数组存在致命的缺陷,就是在初始化时必须指定数组大小,并且在后续操作中不能再更改数组的大小.在实际情况中我们遇到更多的是一开始并不知道要存放多少元素,而是希望容器能够自动的扩展它自身的容量以便能够存放更多的元素.ArrayList就能够很好的满足这样的…
一.LinkedList源码注释 //LinkedList源码 jdk版本1.8.0_121 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { transient int size = 0; /** * 指向第一节点 * first和last要么都为null,要…