java.util.ArrayList源码分析】的更多相关文章

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 可变数组大小的List实现,允许所有的元素,包括null.(该类可粗略地看作是Vector,除了它不是同步化的) size.isEmpty.get.set.iterator和listIterator操作的运行时间是常量.add操作对于添加n个…
一.概述 本篇文章记录通过阅读JDK1.8 ArrayList源码,结合自身理解分析其实现原理. ArrayList容器类的使用频率十分频繁,它具有以下特性: 其本质是一个数组,因此它是有序集合 通过 get(int i) 下标获取数组的指定元素时,时间复杂度是O(1) 通过 add(E e)插入元素时,可直接向当前数组最后一个位置插入(这个描述不是特别准确,其中涉及到扩容.后续将讲解),其时间复杂度为O(1) 通过 add(int i, E e)向指定位置插入元素时,是在原数组的基础上通过拷贝…
一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保证容量能容纳所有数据. 1.1.ArrayList 的继承与实现接口 ArrayList继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口. public class  ArrayList<E> ex…
写在开头 java.util.Collection 作为Java开发最常用的接口之一,我们经常使用,今天我带大家一起研究一下Collection接口,希望对大家以后的编程以及系统设计能有所帮助,本文所研究的jdk版本为jdk1.8.0_131 明确一下几点: Collection是接口,其继承了Iterable接口 Collection属于单值类型集合,重点子接口List接口和Set接口 Java.util.List接口(有序.不唯一) ArraryList ArrayList 是一个数组队列,…
在java jdk8中对HashMap的源码进行了优化,在jdk7中,HashMap处理“碰撞”的时候,都是采用链表来存储,当碰撞的结点很多时,查询时间是O(n). 在jdk8中,HashMap处理“碰撞”增加了红黑树这种数据结构,当碰撞结点较少时,采用链表存储,当较大时,采用红黑树(特点是查询时间是O(logn))存储(有一个阀值控制,大于阀值,将链表存储转换成红黑树存储) HashMap的样子就变成下图的样子: 下面对源码进行分析: public class HashMap<K,V> ex…
简介 ArrayList底层是数组实现的,可以自增扩容的数组,此外它是非线程安全的,一般多用于单线程环境下(Vector是线程安全的,所以ArrayList 性能相对Vector 会好些) ArrayList继承了AbstractList,实现了List接口 1. 实现了Serializable接口,因此它支持序列化,能够通过序列化传输(实际上java类库中的大部分类都是实现了这个接口的) 2. 实现了RandomAccess接口,支持快速随机访问(只是个标注接口,没有实际的方法),这里主要表现…
AbstractStringBuilder是一个抽象类,是StringBuilder和StringBuffer的父类,分析它的源码对StringBuilder和StringBuffer代码的理解有很大的帮助. 先来看看该类的声明: abstract class AbstractStringBuilder implements Appendable, CharSequence {} 该类实现Appendable和CharSequence接口. 成员变量: char[] value;//字符数组用来…
Hashtable实现一个键值映射的表.任何非null的object可以用作key和value. 为了能存取对象,放在表里的对象必须实现hashCode和equals方法. 一个Hashtable有两个参数影响,initial capacity和load factor. Hashtable是同步化的,如果不需要线程安全的特性,建议使用HashMap,如果需要高度线程安全的特性,建议使用java.util.concurrent.ConcurrentHashMap.也就是说,Hashtable已经算…
Dictionary是一个抽象类,Hashtable是它的一个子类. 类的声明:/** The <code>Dictionary</code> class is the abstract parent of any * class, such as <code>Hashtable</code>, which maps keys to values. * Every key and every value is an object. In any one &l…
目录 1.结构特性 2.构造函数 3.成员变量 4.常用的成员方法 5.底层数组扩容原理 6.序列化原理 7.集合元素排序 8.迭代器的实现 9.总结 1.结构特性 Java ArrayList类使用动态数组来存储元素.它就像一个数组,但是没有大小限制. 可以随时添加或删除元素.有以下特性: 底层使用数组来存储元素 没有固定的容量限制,底层数组会自动扩容 允许包含null值 允许包含重复的值 保存了元素的添加顺序 不是线程安全的 2.构造函数 // 1.构建一个空的数组列表 ArrayList(…