
数据结构
文章平均质量分 96
生而知之者为妖
这个作者很懒,什么都没留下…
展开
-
单调栈以及应用(含leetCode第42题接雨水代码)
单调栈定义单调栈的定义:元素值满足单调性的栈结构。与单调队列相比,其只在一端进行进出。递增栈是栈顶到栈底依次递增。插入过程中,保持栈内一直是单调性,将不满足的元素pop出栈,直接丢弃。如下图,分别插入6,10,3,7,4,12的时候,单调递增栈和单调递减栈的情况分别是样子的:应用场景解决的是以某个值为最小(最大)值的最大区间,递增栈能表示入栈元素左边第一个比它大的元素,递减栈能表示入栈...转载 2020-05-02 22:09:34 · 395 阅读 · 0 评论 -
跳跃表原理以及实现(含ConcurrentSkipListMap和zset底层实现原理分析)
前言我们常用来加快查找速度的两类数据结构分别是哈希表和平衡树,哈希表查找时间复杂度是O(1),而各类平衡树(包括红黑树)的查找时间复杂度是O(logn)。哈希表虽然查找速度快,但它不是有序的,无法进行范围查询;平衡树虽然也很香,但它每一次的插入和删除都可能导致全局调整,耗时多。而本篇博文介绍的跳跃表查找的效率与平衡树差不多,时间复杂度都是O(logn),但插入或者删除值时,只是局部调整,过程简单...原创 2020-05-01 21:14:58 · 2040 阅读 · 0 评论 -
全面解析Java常用容器(从底层结构解析HashMap、ConcurrentHashMap、ArrayList、Vector、LinkedList等常用容器之间的区别和特点)
前言本篇博文主要是通过解析HashMap、ConcurrentHashMap、TreeMap、Hashtable、LinkedHashMap、HashSet、TreeSet 、ArrayList、Vector、LinkedList、BitSet、Pair等常用容器的底层结构来分析各种容器的特点、用途以及它们之间的联系和区别总览Java容器库可以分为两大类,一类是继承自Collection接口...原创 2020-04-22 18:54:42 · 4058 阅读 · 4 评论 -
从底层解析B+索引提高查询速度的原因
前言我的上篇文章《解析B+树比B树更加适合做数据库索引的原因》介绍了为什么B+树更适合做索引,并以InnoDB和MyISAM存储引擎介绍了聚集索引和非聚集索引的区别。Mysql默认的存储引擎是InnoDB,因此此篇文章主要以InnoDB的数据页结构以及数据页结构之间的连接方式和查找过程来说明B+索引提高查询速度的原因。数据页结构Mysql进行数据存储的基本结构是数据页(也可称作块),一页的大...原创 2020-04-03 22:08:59 · 1539 阅读 · 0 评论 -
解析B+树比B树更加适合做数据库索引的原因
前言数据库常用的索引有Hash索引、BTree索引 、全文索引。Hash索引虽然等值查询会很快(单条记录查询),但其无法进行有效的范围查询,而范围查询是数据库的常用操作,因此很多存储引擎更倾向于使用BTree索引,例如MyISAM与InnoDB 都是默认使用BTree索引(它们的一个区别是InnoDB使用聚集索引,而MyISAM使用非聚集索引)。本文主要是讨论B+树与B树结构差不多,为什么会用B...原创 2020-03-30 21:33:29 · 2773 阅读 · 0 评论 -
布隆过滤器是什么?(布隆过滤器原理解析)
前言布隆过滤器是一种用来检索数据是否在大集合中的高效的、空间占用少的概率型数据结构,该数据结构由哈希函数以及位数组(二进制向量)来实现的,一般而言,布隆过滤器支持add 和 isExist 操作。过滤器使用场景1、布隆过滤器主要用于判断给定数据是否存在大数据集中。可以用来防止缓存穿透、邮箱的垃圾邮件过滤、黑名单功能等等。利用布隆过滤器可以很有效的减少磁盘 IO 或者网络请求,因为一旦一个值必...原创 2020-03-25 14:05:41 · 628 阅读 · 0 评论