![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
认真搞数据结构
文章平均质量分 73
wongyaa
这个作者很懒,什么都没留下…
展开
-
Set底层结构
常见的Set有以下几种HashSet:底层维护HashMapLinkedHashSet:底层维护LinkedHashMapTreeSet:底层维护TreeMap注意点: LinkedHashSet维护LinkedHashMap的方式是调用super的一个构造方法。也就是说特殊情况下,HashSet也可以实现LinkedHashSet的功能。惊呆了老铁这是什么表演。说出来你可能不信,这篇博客已经结束了。...原创 2022-01-19 15:39:39 · 1254 阅读 · 0 评论 -
红黑树介绍
一、红黑树的介绍先来看下算法导论对R-B Tree的介绍:红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。因为一棵由n个结点随机构造的二叉查找树的高度为lgn,所以顺理成章,二叉查找树的一般操作的执行时间为O(lgn)。但二叉查找树若退化成了一棵具有n个结点的线性链后,则这些操作最坏情况运行时间为O(n)。红黑树虽然本质上是一棵二叉查原创 2022-01-19 13:43:06 · 193 阅读 · 0 评论 -
HashMap底层结构
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMa原创 2022-01-18 17:40:07 · 975 阅读 · 2 评论 -
List底层结构
List的实现类常用的用LinkedListArrayListvectorLinkedList:线程不安全底层结构是双向链表,开销在于需要存储结点信息以及结点指针信息。双向链表是由三部分来组成的:prev、data、nextprev:存储上一个节点的地址data:存储将要存储的数据next:存储下一个节点的地址双向链表的排序方式是没有顺序的;当我们新增一个元素时,只需要修改前一个元素的next和后一个元素的prev即可,删除元素同理;这样使得LinkedList对于新增和删除原创 2022-01-17 20:51:34 · 3318 阅读 · 0 评论 -
联合索引在B+Tree上的存储结构
有一个T1表,数据如上图。创建了一个联合索引idx_t1_bcd(b,c,d),b、c、d三列作为联合索引,所有索引列都出现在索引树上,并依次比较三列的大小,在B+树上的结构图如下:我们先看T1表,他的主键暂且我们将它设为整型自增的 ,InnoDB会使用主键索引在B+树维护索引和数据文件,然后我们创建了一个联合索引(b,c,d)也会生成一个索引树,同样是B+树的结构,只不过它的data部分存储的是联合索引所在行记录的主键值 (上图叶子节点紫色背景部分)。为什么是主键值,而不是整个行记录呢? 因为这个联.原创 2022-01-12 20:45:53 · 1373 阅读 · 0 评论 -
B树,B-树,B+树
B树即二叉搜索树:1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如:B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找原创 2022-01-12 19:47:11 · 234 阅读 · 0 评论