Java源码阅读之ArrayList】的更多相关文章

基于jdk1.8的ArrayList源码分析. 实现List接口最常见的大概就四种,ArrayList, LinkedList, Vector, Stack实现,今天就着重看一下ArrayList的源码实现.ArrayList的底层结构就是最简单的数组,数据结构导致了它查询快,但是增删慢.另外官方也说了,ArrayList是线程不同步的.我觉得我有必贴一下官方文档的描述. Resizable-array implementation of the List interface. Implemen…
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读…
Java源码阅读的真实体会(一种学习思路)   刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码很漂亮,但我绝不建议你一开始…
本文简单介绍了 ArrayList,并对扩容,添加,删除操作的源代码做分析.能力有限,欢迎指正. ArrayList是什么? ArrayList 就是数组列表,主要用来装载数据.底层实现是数组 Object[] elementData,当我们装载的是基本数据类型 int, long, boolean, shot...的时候我们只能存储他们对应的包装类型. 与它类似的是 LinkedList,和 LinkedList 相比,它的查找和访问元素的速度较快,但新增,删除的速度较慢. 线程安全吗? 线程…
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读它.我文中会专门谈到这个,暂时不展开.…
收藏自http://www.iteye.com/topic/1113732 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码…
一.ArrayList概述 首先我们来说一下ArrayList是什么?它解决了什么问题?ArrayList其实是一个数组,但是有区别于一般的数组,它是一个可以动态改变大小的动态数组.ArrayList的关键特性也是这个动态的特性了,ArrayList的设计初衷就是为了解决Java数组长度不可变的问题.我们都知道在Java中数组一旦被创建出来,那么这个数组的大小就不可以改变了,而且初始化的时候就必须要指定数组的大小.在开发的场景中很多时候我们并不知道我们的数据量有多少,如果数组创建得太大就会造成极…
1类签名与注释 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable 该类实现了一个哈希表,它将键映射到值. 任何非null对象都可以用作键值或值. 为了从散列表成功存储和检索对象,用作键的对象必须实现hashCode方法和equals方法. 与HashMap类似,两个影响Hashtable性能的参数: 初始容量和负…
Stack(栈)实现了一个后进先出(LIFO)的数据结构.该类继承了Vector类,是通过调用父类Vector的方法实现基本操作的. Stack共有以下五个操作: put:将元素压入栈顶. pop:弹出栈顶元素(返回栈顶元素,并删除). peek:取栈顶元素(不删除). empty:判断栈是否为空. search:搜索一个元素是否在栈里,并返回其到栈顶的距离. public class Stack<E> extends Vector<E> { public Stack() { }…
ArrayList概述 ArrayList是一个的可变数组的实现,实现了所有可选列表操作,并允许包括 null 在内的所有元素.每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小.它总是至少等于列表的大小.随着向ArrayList中不断添加元素,其容量也自动增长.自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量.在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容…
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…
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 本博客将从源码角度带领大家学习关于ArrayList的知识. 一ArrayList类的定义: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 从上述代码可以看到:ArrayList继承自AbstractList同时实…
阅读顺序参考链接:https://blog.csdn.net/qq_21033663/article/details/79571506 阅读源码:JDK 8 计划阅读的package: 1.java.lang 2.java.util 3.java.util.concurrent 4.java.util.concurrent.atomic…
1类签名与简介 public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable LinkedBlockingQueue是Java并发包的成员,该类基于链表实现了阻塞队列. 基于链表的队列通常比基于数组的队列有更高的吞吐量,但是在大多数并发程序中可预测性能较低.(本质是理解链表和数组各自的性能优势) LinkedBl…
1类签名与简介 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable 一个有限的阻塞队列由数组支持. 这个队列排列元素FIFO(先进先出).新元素插入队列的尾部,队列检索操作获取队列头部的元素. ArrayBlockingQueue是线程安全的,其内部通过“互斥锁”(Lock)保护竞争资源,实现了多线程对竞…
1类签名与注释 public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable Vector类实现了一个可伸缩的对象数组.和数组一样,他里面的组件能被integer型的索引访问.不同的是,Vector被创建后,当增加或删除项的时候,其size可以增长或收缩来适应大小. 每个Vector都试图通过保持capaci…
一.类继承关系 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable ArrayList继承AbstractList,也实现了List和RandomAccess(一个空接口,也就是标记接口.),Cloneable(可被克隆), Serializable接口. 二.类属性 //默认容量 priva…
public final class Integer extends Number implements Comparable<Integer> Integer 由final修饰了,所以该类不能够被继承,同时 Integer 继承了Number类,因此可以将Integer转换成 int .double.float.long.byte和short类型的数据,另外,也实现了comparable接口,因此Integer类也可以进行自然排序. 构造方法只有两个: public Integer(int…
ArrayList是以数组为基准的容器类,和LinkedList(链表)正好相反.因而ArrayList拥有更好的查找性能,增删操作则差一些.ArrayList封装了对于常规数组的操作,同时可以自动扩展容量. 下面对ArrayList的API进行归类: 1.构造函数: ①ArrayList() 以空数组进行构造 ②ArrayList(int) 以指定大小的容量初始化数组 ③ArrayList(Collection) 以指定集合构造ArrayList的数组元素 2.增加元素: ①boolean a…
1 类注释 Class {@code Object} is the root of the class hierarchy. Every class has {@code Object} as a superclass. All objects, including arrays, implement the methods of this class. Object类是类层次结构的根,是每一个类的父类.所有的对象(包括数组)都是实现了object类的方法. 2 outline(大纲) outl…
1类签名与注释 public final class String implements java.io.Serializable, Comparable<String>, CharSequence String类被定义为final类型的,所以String对象一旦创建了,就是不可变的. String类实现了Serializable接口,表示可以序列化. String类实现了Comparable<String>接口,表示String类型可以相互比较.(通过compareTo方法) S…
1类签名与注释 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap是基于哈希表实现的Map接口. 此实现提供了所有可选的地图操作,并允许null的值和null键. ( HashMap类大致相当于Hashtable ,除了它是不同步的,并允许null).该类不能保证map的顺序,特别是,它不能保证顺序在一段时间内保持不…
基于JDK7.0 ArrayList<E>类继承了抽象类AbstractList<E> 实现了List<E> 接口,RandomAccess接口,Cloneable接口,Serializable接口 成员变量: (1) private static final long serialVersionUID = 8683452581122892189L; 序列化号 (2) private transient Object[] elementData; 存储ArrayList…
1类签名与注释 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable 双向链表实现了List和Deque接口. 实现所有可选列表操作,并允许所有元素(包括null ). 请注意,此实现不同步. 如果多个线程同时访问链接列表,并且至少有一个线程在结构上修改列表,则必须在外…
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…
1. ArrayList概述: ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小.   每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小.它总是至少等于列表的大小.随着向ArrayList中不断添加元素,其容量也自动增长.自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容…
java.util.LinkedList LinkedList是实现了List接口的双链表实现,拥有list的所有方法并且允许所有元素(包括null). 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环链表. 需要注意的是LinkedList是非同步的,当大量线程并发地访问链表时,当至少有一个线程修改了列表的结构,那它必须进行外部同步(结构修改指的是…
1类签名和简介 package java.util; public class Observable Observable是Java内置的观察者模式中的主题类(没错,是类不是接口),和其对应的观察者接口是Observer,观察者模式是JDK中使用最多的模式之一. 观察者模式定义了对象之间的一对多的关系,这样一来,当一个对象(主题)改变状态时,它的所有依赖者(观察者)都会收到通知并自动更新. Observable内部使用Vector来存储注册的观察者实例,是线程安全的. 注意:jdk将Observ…
1类签名与简介 public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable PriorityQueue是一个基于优先级堆的无限队列,无限的意思是说队列的容量可以自动扩容,最大容量为整形最大值.扩容规定如下当容量小于64时扩大为原来的2倍,否则扩大为原来的1.5倍(也就是容量增大50%). 优先级队列不允许null元素,也不允许插入不可比较的对象.不可比较是指待插入对象的…
1类签名与注释 public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence 一个可变的字符序列. 此类提供与StringBuffer相同的API,但不保证同步.在单线程中应该优先使用StringBuilder,因为它不需要同步,在大多数实现中将更快. StringBuilder的主要实现是append与insert方法,他们是重载的,以便接…