数据结构
独家技术
这个作者很懒,什么都没留下…
展开
-
几张动态图清晰展示常用数据结构及其设计原理
最近在整理数据结构方面的知识,系统化看了下Java中常用数据结构,突发奇想用动画来绘制数据流转过程。主要基于jdk8,可能会有些特性与jdk7之前不相同,例如LinkedList LinkedHashMap中的双向列表不再是回环的。HashMap中的单链表是尾插,而不是头插入等等,后文不再赘叙这些差异,本文目录结构如下:1、LinkedList LinkedList经典...转载 2019-02-16 16:28:19 · 1581 阅读 · 3 评论 -
什么是ConcurrentHashMap?
一、回首往事-HashMap 回顾HashMap的结构: HashMap是一个Entry对象的数组。 数组中的每一个Entry元素,又是一个【链表】的【头节点】 HashMap不是【线程安全的】,在高并发环境下做【插入操作】,有可能出现【环形链表】。 二、避免...原创 2019-02-26 21:29:11 · 202 阅读 · 0 评论 -
多线程/高并发下的HashMap
有一定经验的开发者都知道,HashMap是非线程安全的。 在高并发环境下,HashMap可能出现致命问题。一、Rehash是HashMap在扩容时候的一个步骤 HashMap的【容量】是有限的,当经过多次元素插入,使得HashMap达到一定饱和度时,Key映射index位置发生冲突的几率会逐渐提高。 这时候,HashMap需要扩展它的长度(...原创 2019-02-26 18:08:02 · 3142 阅读 · 1 评论 -
HashMap原来如此简单!
一、概述 1、HashMap是一个用于存储Key-Value键值对的集合,每个【键值对】也叫作【Entry】, 这些【键值对(Entry)】分散存储在一个【数组】中,这个数组就是HashMap的主干。 大概如下图: 2、HashMap数组每一个元素的【初始值】都是Null ...原创 2019-02-26 17:13:50 · 489 阅读 · 0 评论 -
集合系列—LinkedList源码分析
上篇我们分析了ArrayList的底层实现,知道了ArrayList底层是基于数组实现的,因此具有查找修改快而插入删除慢的特点。本篇介绍的LinkedList是List接口的另一种实现,它的底层是基于双向链表实现的,因此它具有插入删除快而查找修改慢的特点,此外,通过对双向链表的操作还可以实现队列和栈的功能。LinkedList的底层结构如下图所示。F表示头结点引用,L表示尾结点引用...原创 2019-02-20 12:41:23 · 127 阅读 · 0 评论 -
什么是B-树?
一、什么是B-树? Mysql数据库用过了吧? 里面的【索引】是基于什么【数据结构】? 索引主要是基于【Hash表】或者【B+树】 要弄明白B+树,先要了解什么是B-树。 B-树就是【B树】,中间的横线并不是减号。二、为什么数据库【索引】要使用【树】结构存储呢...原创 2019-03-01 14:27:18 · 8216 阅读 · 0 评论 -
集合系列—ArrayList源码分析
本篇分析ArrayList的源码,在分析之前先跟大家谈一谈数组。数组可能是我们最早接触到的数据结构之一,它是在内存中划分出一块连续的地址空间用来进行元素的存储,由于它直接操作内存,所以数组的性能要比集合类更好一些,这是使用数组的一大优势。 但是我们知道数组存在致命的缺陷,就是在初始化时必须指定数组大小,并且在后续操作中不能再更改数组的大小。在实际情况中我们遇到更多的是一开始并不知道要存放多...原创 2019-02-20 10:27:07 · 58 阅读 · 0 评论 -
什么是跳跃表?
一、什么是跳跃表? 跳跃表(Skip List)是一种基于【有序链表】的扩展,简称【跳表】。 其实就是使用【关键节点】作为【索引】的一种结构。 怎样能更快查找到一个【有序链表】的某一节点呢? 可以利用类似【索引】的思想,提取出【链表】中的【部分关键节点】 比如: ...原创 2019-03-01 12:07:05 · 9136 阅读 · 0 评论 -
集合源码系列—HashMap源码分析
前面我们已经分析了ArrayList和LinkedList这两个集合我们知道ArrayList是基于数组实现的,LinkedList是基于链表实现的。它们各自有自己的优劣势,例如ArrayList在定位查找元素时会优于LinkedList,而LinkedList在添加删除元素时会优于ArrayList。而本篇介绍的HashMap综合了二者的优势,它的底层是基于哈希表实现的(数组+...转载 2019-02-19 17:13:27 · 102 阅读 · 0 评论 -
什么是红黑树?
一、什么是红黑树? 要学习【红黑树】,需要先理解【二叉查找树(Binary Search Tree)】 二叉查找树(BST)具备的特性: 1. 左子树上所有节点的值均小于或等于它的根节点的值 2. 右子树上所有节点的值均大于或等于它的根节点的值 3. 左、右子树也分别为二叉排序树。...原创 2019-02-26 22:29:05 · 331 阅读 · 1 评论