数据结构
从入门到放弃
Sicimike
桃花影落飞神剑,碧海潮生按玉萧。
展开
-
ConcurrentHashMap底层结构与实现原理
前言HashMap是一个非常优秀的类,使用也非常频繁。原创 2020-01-19 13:42:20 · 4219 阅读 · 0 评论 -
深度解析优先级队列PriorityQueue
前言从学习队列(Queue)的第一天起,我们就知道队列是满足FIFO(后进先出)的。但是所有的队列都是这样吗?显然不是,今天所讲解的优先级队列PriorityQueue就不满足FIFO。优先级队列优先队列是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列往往用堆来实现。前一篇...原创 2019-12-16 22:57:42 · 2897 阅读 · 2 评论 -
图解数据结构:堆
前言此处所说的堆,是数据结构中的堆,而不是JVM运行时数据区域的那个堆。本篇主要讲解数据结构中堆的实现,效率,使用等。定义堆(英语:Heap)是计算机科学中的一种特别的树状数据结构。若是满足以下特性,即可称为堆:“给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于)C的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆(min heap);反之,若母节点的值恒大...原创 2019-12-12 21:59:32 · 4132 阅读 · 0 评论 -
深度解析阻塞队列ArrayBlockingQueue
前言前一篇 深度解析阻塞队列LinkedBlockingQueue 从底层源码和结构原理入手,较为深入的讲解了由单链表实现的阻塞队列LinkedBlockingQueue。本篇所要讲解的依然是阻塞队列,阻塞还是那个阻塞,队列还是那个队列。只是ArrayBlockingQueue使用数组实现的阻塞队列。由于前一篇已经重点讲解了阻塞队列中,阻塞API的实现。所以本篇的重点放在ArrayBlocki...原创 2019-12-10 22:28:10 · 2062 阅读 · 0 评论 -
深度解析阻塞队列LinkedBlockingQueue
前言关于阻塞队列的使用,其实之前的文章已经提到过:三种方式实现生产者-消费者模型,最后一种方式就是用阻塞队列实现的。仔细观察会发现,前两种也是在用wait/notify和ReentrantLock/Condition模拟阻塞队列。LinkedBlockingQueue是阻塞队列中的一种,见名知意,由链表实现的阻塞队列。...原创 2019-12-05 23:19:50 · 2181 阅读 · 0 评论 -
深度解析CopyOnWriteArrayList,线程安全的ArrayList
前言ArrayList是线程不安全的,这点毋庸置疑。因为ArrayList的所有方法既没有加锁,也没有进行额外的线程安全处理。而Vector作为线程安全版的ArrayList,存在感总是比较低。因为无论是add、remove还是get方法都加上了synchronized锁,所以效率低下。JDK1.5引入的J.U.C包中,又实现了一个线程安全版的ArrayList——CopyOnWriteArr...原创 2019-12-04 21:58:16 · 2404 阅读 · 1 评论 -
HashMap多线程扩容导致死循环解析(JDK1.7)
不会再有比这篇更易懂的HashMap扩容死循环了原创 2019-11-28 22:07:20 · 4719 阅读 · 2 评论 -
HashMap底层结构与实现原理
前言HashMap可以说是我们用过最多的<K,V>键值对集合了。既然用得多,就得深入的了解它。基于此,本篇主要从源码层面讲解HashMap,包括成员变量(常量)、扩容时机、扩容过程、核心方法、JDK1.7的缺陷、JDK1.8对HashMap的改进等等JDK1.7下的HashMap成员变量/** * 默认初始容量,必须为2的指数幂 */static final int D...原创 2019-11-27 21:49:31 · 2525 阅读 · 0 评论 -
单链表反转(Java)
前言单链表反转是leetcode(力扣)第206题:206. 反转链表要想反转单链表,首先得知道什么是单链表。前一篇 图解数据结构:数组和单链表 已经非常详细的解析了什么是单链表。单链表结构/** * 单链表 */public class SingleLinkedList<E> { /** * 内部节点 */ private clas...原创 2019-11-09 15:43:28 · 2032 阅读 · 0 评论 -
图解数据结构:二叉树
前言树是数据结构中的一种非线性结构,包括很多种:二叉树、二分搜索树、avl树、红黑树、B树、B+树等等。之所以分成这么多种,是为了更好地解决各类问题。其中最简单的是二叉树和二分搜索树,本篇主要讲解二叉树和二分搜索树。二叉树讲解二叉树之前,先看一下普通的树,以及树中常见的概念。节点拥有的子树数称为节点的度(Degree),度为0的节点称为叶子节点或者终端节点。度不为0的节点称为分支节点或者非...原创 2019-10-30 22:09:05 · 3938 阅读 · 0 评论 -
图解数据结构:栈和队列
前言上一篇 图解数据结构:数组和单链表 主要讲解了数组和链表这两种线性结构的特点、区别、时间复杂度分析等。对数组和链表的划分,实际上是物理结构(存储结构)的划分。物理结构有两种基本的结构:顺序存储结构、链式存储结构。而本篇说讲解的栈和队列属于逻辑结构上的划分。逻辑结构分为线性结构、非线性结构。线性结构:有且仅有一个开始节点和一个终端节点,每个节点最多只有一个直接前驱和一个直接后继。代表结构...原创 2019-10-22 22:11:37 · 4817 阅读 · 1 评论 -
图解数据结构:数组和单链表
前言数据结构始终是计算机科学绕不开的话题,是计算机中存储、组织数据的方式。学习数据结构能让我们明白,如何更高效的存、取数据。编写程序的目的就是为了处理数据,处理数据本质上就是存、取、运算。本篇从最简单的数据结构入手,讲解数组和链表。主要讲解他们的特点、存储结构、区别、各种场景下的效率等问题。更具体一点,就是从本质上讲解了ArrayList和LinkedList的区别。数组在计算机科学中,...原创 2019-10-17 20:46:20 · 3344 阅读 · 3 评论