学习JDK1.8集合源码之--ArrayList】的更多相关文章

参考文档: https://cloud.tencent.com/developer/article/1145014 https://segmentfault.com/a/1190000018578944 http://www.importnew.com/9928.html https://blog.csdn.net/zero__007/article/details/52166306 1. ArrayList简介 ArrayList底层基于数组实现的一种线性数据结构,通过数组的索引原理实现了快速…
一.前言 在前面几篇,我们已经学习了常见了Map,下面开始阅读实现Collection接口的常见的实现类.在有了之前源码的铺垫之后,我们后面的阅读之路将会变得简单很多,因为很多Collection的结构与Map的类似,甚至有不少是直接用了Map里的方法.接下来让我们一起来看一下ArrayList的源码. 二.ArrayList结构概览 顾名思义,ArrayList的结构实际就是一个Object[].所以它的特性很明显,插入一个元素的时候,是耗时是一个常量时间O(1),在插入n个元素的时候,需要的…
1. LinkedHashSet简介 LinkedHashSet继承自HashSet,故拥有HashSet的全部API,LinkedHashSet内部实现简单,核心参数和方法都继承自HashSet,只是重写了spliterator一个方法. HashSet底层通过HashMap进行数据存储,而LinkedHashSet则是通过LinkedHashMap进行数据存储,故LinkedHashSet是一个有序的不可重复集合,非线程安全. 2. LinkedHashSet实现 //继承自HashSet,…
1. HashMap简介 HashMap是一种key-value结构存储数据的集合,是map集合的经典哈希实现. HashMap允许存储null键和null值,但null键最多只能有一个(HashSet就是以HashMap实现的,通过HashMap的key存储元素,所以HashSet也最多允许存储一个null值并且其中的元素不可重复). HashMap是非线程安全的实现,在多线程环境下会出现数据丢失的情况,与JDK1.8以前不同的是并不会出现死循环的情况.在多线程情况下最好使用Concurren…
1. Vector简介 Vector是JDK1.0版本就推出的一个类,和ArrayList一样,继承自AbstractList,实现了List.RandomAccess.Cloneable.java.io.Serializable接口,底层也是基于数组实现的,不同的是它是一个线程安全的类. 2. Vector实现 1. 核心属性 //底层存储数组 protected Object[] elementData; //数组内实际存储元素个数 protected int elementCount; /…
1. WeakHashMap简介 WeakHashMap继承自AbstractMap,实现了Map接口. 和HashMap一样,WeakHashMap也是一种以key-value键值对的形式进行数据的存储,底层存储结构为数组加链表,并且键值都可以为null.与HashMap不同的是,WeakHashMap实现了弱引用,当一个key不再正常使用时,会从WeakHashMap中自动移除,被GC回收并存入ReferenceQueue中.而这一特点主要是通过ReferenceQueue加WeakRefe…
1. ArrayDeque简介 ArrayDeque是基于数组实现的一种双端队列,既可以当成普通的队列用(先进先出),也可以当成栈来用(后进先出),故ArrayDeque完全可以代替Stack,ArrayDeque是非线程安全的,Stack是线程安全的. ArrayDeque虽然是基于数组实现的,但很容易被数组这种数据结构所迷惑.因为数组是从0开始到length-1位置结束的,但ArrayDeque的实现实际上是一种循环结构的队列,首尾位置完全靠head和tail两个首尾指针来决定的,正常理解的…
1. HashSet简介 HashSet是一个不可重复的无序集合,底层由HashMap实现存储,故HashSet是非线程安全的,由于HashSet使用HashMap的Key来存储元素,而HashMap的Key可以允许有一个null值,所以HashSet是可以存储null值的. 由于HashSet的不可重复性,在项目开发中可以利用这一点进行元素去重,但前提是在不考虑线程安全的问题基础上. 2. HashSet的继承关系 HashSet继承自AbstractSet,实现了Set.Cloneable.…
1. LinkedList简介 LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的.因为它实现了Deque接口,所以也是双端队列的一种实现. 2.LinkedList继承关系 LinkedList继承自AbstractSequentialList,实现了List.Deque.Cloneable.java.io.Serializable接口. 1. AbstractSequentialList继承自AbstractList,是List的简化版实现,只…
1. TreeMap简介 TreeMap继承自AbstractMap,实现了NavigableMap.Cloneable.java.io.Serializable接口.所以TreeMap也是一个key-value结构的Map集合,并且提供了搜索导航及排序功能,能够被克隆以及支持序列化操作. TreeMap是基于红黑树实现的有序key-value集合,可以对元素进行自动排序,排序的规则可以是自然排序也可以是实现Comparable接口指定排序方式. 由于红黑树的查找.插入和删除的时间复杂度都是O(…