集合源码剖析
可乐不渴了
这个作者很懒,什么都没留下…
展开
-
打工人必会的HashMap! 下篇
早安,打工人.上篇我们讲了HashMap中红黑树相关TreeNode的源码,今天我们来看看HashMap的整体.概念HashMap是Java中使用最频繁的用于key-value处理的数据类型.JDK1.8以下HashMap底层都是以数组+链表的结构组成,JDK1.8对HashMap底层进行了优化,引入了红黑树数据结构.本文以JDK1.8来研究HashMap的底层实现和功能原理.源码解析结构图继承关系public class HashMap<K, V> extends Abstra原创 2020-11-10 11:20:39 · 218 阅读 · 0 评论 -
打工人必会的HashMap! 上篇
早安,打工人.现在只要去面试无论大厂小厂几乎都包含了HashMap,咱们就来看看HashMap源码.上次我们说到了Hashtable是数组+链表结构,而HashMap则是数组+链表+红黑树结构.咱们在正式开讲之前需要先知道什么是红黑树概念红黑树(R-B Tree),全称Red-Black Tree是一种自平衡二叉查找树,可以在==O(logN)==时间内完成查找,增加,删除等操作.它的每个节点上都存储了颜色标识,可以是红或黑.在进行插入和删除等可能破坏树平衡的操作时,会通过变色,左旋,右旋来完成自平衡原创 2020-11-10 11:18:22 · 263 阅读 · 1 评论 -
一篇文章带你搞定HashTable
在咱们开讲源码之前,首先需要了解下什么是哈希表?散列表(Hash table 又称哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度.这个映射函数就叫做散列函数,存放记录的数组叫做散列表. —— 百度百科如图:在Java中HashTabl原创 2020-10-27 23:56:43 · 240 阅读 · 0 评论 -
PriorityQueue是什么? 看过后才知道原来这么简单!
上篇文章里我们了解到ArrayDeque是Queue的实现,而PriorityQueue是Queue的一种变体实现.在刷算法题的时候经常能用到,今天来讲讲PriorityQueue.概述我们都知道Queue是一个先进先出的队列,而PriorityQueue则是在队列的基础上增加了优先级的特性,是一个基于小顶堆的无解队列.举个栗子: 在游乐园门口有很多人在排队进场,这就是一个`Queue`.这时暴发户小明想插队提前进场,`Queue`显然就不符合了,因为`Queue`是严格按照`F...原创 2020-10-13 23:09:22 · 3127 阅读 · 1 评论 -
集合源码解析之ArrayDeque
今天我们来说说ArrayDeque.很多人可能没用过甚至都没有听过这个类.当需要使用栈时,官 方已不推荐Stack,而是推荐使用效率更高的ArrayDeque(次选LinkedList).概述双端队列是一种两端皆可实现进出的特殊队列,而ArrayDeque便是Java中一个双端队列的实现.它内部基于数组存储数据,维护两个指针分别指向首尾,可以更高效的进行元素的插入和查找.其作为栈使用比Stack效率高,作为队列使用比LinkedList快,可以说ArrayDeque是用作队列,栈的不二选择...原创 2020-09-19 13:12:00 · 151 阅读 · 0 评论 -
集合源码解析之Vector
概述在前两章我们已经学习了List常用的两个实现ArrayList、LinkedList,下面我们来学习下Vector.Vector和ArrayList一样是基于数组实现的List,区别在于Vector是线程安全的,我们来研究下其源码.Vector和ArrayList配合食用,味道更佳哦…源码分析结构图继承关系public class Vector<E> extends AbstractList<E> implements List<E>, R原创 2020-09-01 10:10:18 · 147 阅读 · 0 评论 -
集合源码解析之LinkedList
集合源码解析之LinkedList在日常开发中,最常用的List是ArrayList其次便是LinkedList了.上次我们已经研究过了ArrayList,今天来深入学习下LinkedList...概述LinkedList顾名思义本质上就是一个链表.它和ArrayList一样实现了List接口.ArrayList是基于可变数组实现的,因此对于随机访问和修改ArrayList的效率会更高,而LinkedList更擅长于随机插入和删除,毕竟只需要移动"指针"即可.源码分析结构图继承关系pub原创 2020-08-28 20:42:44 · 165 阅读 · 0 评论 -
集合源码解析之ArrayList
集合源码解析之ArrayList ArrayList是开发中最常使用到的集合,要想深入了解绕不过源码,本篇文章简单讲解其源码,领略ArrayList的风采... ps: 本文以openjdk8为主.概述ArrayList是一种可以动态操作的集合类,基于数组实现.Arr原创 2020-08-22 12:55:51 · 196 阅读 · 0 评论 -
集合源码剖析之HashMap
/* * 大致的观看了下HashMap的核心部分, * 主要在put,resize上 * 每次HashMap扩容1倍, * 当产生hash碰撞时,在桶的位置上产生链表,当链表的节点数>=8,并且整体HashMap元素数量>=64 * 则链表转为红黑树. * resize操作非常耗费性能,所以在初始化HashMap思考下合适大小, * 每次当HashMap中的元素<=...原创 2019-07-12 08:18:55 · 127 阅读 · 0 评论