Java集合-LinkedList
参考文献
LinkedList-JDK8
属性
123456789101112131415161718// 元素个数transient int size = 0;/** * 链表首节点 * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null && first.item != null) */transient Node<E> first;/** * 链表尾节点 * Pointer to last node. * Invariant: (first == null && last == null) || * (last.next == null && last.item != null) */transient Node<E> last;
节点类
1234567891011private static class Node& ...
Java集合-ArrayList
参考文献
Collection - ArrayList 源码解析
死磕 java集合之ArrayList源码分析
ArrayList-JDK8
属性
123456789101112131415161718192021222324252627282930313233343536373839404142/** * 该常量代表ArrayList默认的初始化容量,实际上这个值在ArrAyList中的使用非常少 * 只出现在ArrayList第一次确认容量的时候——而且还是在默认情况下 * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; /** * 该常量值是在ArrayList初始化的时候使用,用来将elementData数组赋值为一个没有元素的空数组。 * 注意:只是在初始化时使用 * 空数组,用于空实例的共享空数组实例(若传入的容量为0时使用). * Shared empty array instance used for emp ...
无题
参考文献
3W 字详解 Java 集合
源码阅读(1):Java中主要的List结构——概述
集合框架
所有集合实现类的最顶层接口为Iterable和Collection接口,再向下Collection分为了三种不同的形式,分别是List,Queue和Set接口,然后就是对应的不同的实现方式.
List
ArrayList: Object[] 数组
Vector: Object[] 数组
LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)
Set
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于 HashMap 实现一样,不过还是有一点点区别的
TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)
Queue
Priorit ...
Java基础-集合类-HashMap
参考文献
HashMap源码分析(jdk1.8,保证你能看懂)
理论
HashMap最早是在JDK1.2中出现,直到JDK1.7一直没太大变化,但是到了JDK1.8突然进行了一个很大的改动.其中一个显著的改动就是:
之前JDK1.7的存储结构是数组+链表
到了JDK1.8变成了数组+链表+红黑树.
另外,HashMap是非线程安全的,也就是说多线程同时对HashMap中的某个元素进行增删改操作时,是不能保证数据的一致性的.
在JDK1.7中,首先是把元素放在一个个数组里面,后来存放的数据元素越来越多,于是就出现了链表,对数组中的每个元素,都可以有一条链表来存储元素.这就是有名的"拉链式"存储方法
后来存储的元素越来越多,链表也越来越长,查找一个元素的时候效率不仅没有提高(链表不适合查找,适合增删),反而下降了不少,于是在JDK1.8中对这条链表进行了改进–使用红黑树. 将链表结构编程红黑树,原来JDK1.7的优点是增删效率提高,在JDK1.8中不仅增删的效率提高了,查找的效率也提升了.
核心是基于哈希值的桶和链表
一般用数组实现桶
发生哈希 ...