Java集合源码阅读
文章平均质量分 56
wardseptember
https://wardseptember.gitee.io/mynotes/#/
展开
-
【Java集合源码05】PriorityQueue源码分析
简介PriorityQueue 一个基于优先级的无界优先级队列。优先级队列的元素默认按照升序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。PriorityQueue 队列的头指排序规则最小那个元素。如果多个元素都是最小值则随机选一个。PriorityQueue 是一个无界队列,但是初始的容量(实际是一个Object[]),随着不断向优先级队列添加元素,原创 2021-01-11 21:13:47 · 294 阅读 · 0 评论 -
【Java集合源码04】Stack源码分析
简介Stack是栈,先入后出,继承自Vector,所以是线程安全的。遗留类,不推荐使用,可用Deque模拟战。本质上还是用数组实现的,数组尾部就是栈顶。Deque<Integer> stack = new LinkedList<>();stack.addFirst(12);stack.pollFirst(); 源码源码比较简单package java.util;publicclass Stack<E> extends Vector<E&g原创 2021-01-08 15:29:56 · 231 阅读 · 0 评论 -
【Java集合源码03】Vector源码分析
简介Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:Vector 是同步访问的。Vector 包含了许多传统的方法,这些方法不属于集合框架。Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。Vector是线程安全的,但是是遗留类,不推荐使用。内部使用Object数组实现,通过加全局锁synchronized实现线程安全。默认容量为10. Vector源码分析基于jdk1.8源码源码很简单,没查可说的get原创 2021-01-07 12:37:36 · 124 阅读 · 0 评论 -
HashMap详解——基于jdk1.8和jdk1.7
HashMap 1.7使用数组加链表实现hashmap。hashmap初始容量为16,装载因子为0.75,hashmap里面的元素达到阈值(阈值=容量 * 装载因子)时,就会进行扩容,每次扩容2倍。put方法 public V put(K key, V value) { // 当第一次往里面放元素时才真正地申请空间 if (table == EMPTY_TABLE) { inflateTable(threshold); }原创 2020-09-28 15:55:02 · 390 阅读 · 0 评论 -
【Java集合源码02】LinkedList源码分析
简介LinkedList是一个实现了List接口和Deque接口的双端链表。 LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性; LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以调用静态类Collections类中的synchronizedList方法:List list=Collections.synchronizedList(new LinkedList(...)); 实原创 2020-12-03 13:28:35 · 181 阅读 · 1 评论 -
【Java集合源码01】ArrayList源码分析
1. ArrayList 简介ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。ArrayList继承于 AbstractList,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。public class ArrayList<E>原创 2020-12-02 22:02:28 · 252 阅读 · 0 评论