11
22
3- ### 3.2 数据结构
3+ ## 3.2 数据结构
44
55> 作者:Guide哥。
66>
1111> 欢迎大家自荐,数据结构这部分内容是很久之前写的,如果有老哥对这方面的总结不错的话,欢迎投稿联系。我的邮箱 : koushuangbwcx @163.com 。
1212
1313
14- #### 3.2.1 Queue
14+ ### 3.2.1 Queue
1515
16- ##### 什么是队列
16+ #### 什么是队列
1717队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。
1818
19- ##### 队列的种类
19+ #### 队列的种类
2020
2121- ** 单队列** (单队列就是常见的队列, 每次添加元素时,都是添加到队尾,存在“假溢出”的问题也就是明明有位置却不能添加的情况)
2222- ** 循环队列** (避免了“假溢出”的问题)
2323
24- ##### Java 集合框架中的队列 Queue
24+ #### Java 集合框架中的队列 Queue
2525
2626Java 集合中的 Queue 继承自 Collection 接口 ,Deque, LinkedList, PriorityQueue, BlockingQueue 等类都实现了它。
2727Queue 用来存放 等待处理元素 的集合,这种场景一般用于缓冲、并发访问。
2828除了继承 Collection 接口的一些方法,Queue 还添加了额外的 添加、删除、查询操作。
2929
30- ##### 推荐文章
30+ #### 推荐文章
3131
3232- [ Java 集合深入理解(9):Queue 队列] ( https://blog.csdn.net/u011240877/article/details/52860924 )
3333
34- #### 3.2.2 Set
34+ ### 3.2.2 Set
3535
36- ##### 什么是 Set
36+ #### 什么是 Set
3737Set 继承于 Collection 接口,是一个不允许出现重复元素,并且无序的集合,主要 HashSet 和 TreeSet 两大实现类。
3838
3939在判断重复元素的时候,HashSet 集合会调用 hashCode()和 equal()方法来实现;TreeSet 集合会调用compareTo方法来实现。
4040
41- ##### 补充:有序集合与无序集合说明
41+ #### 补充:有序集合与无序集合说明
42+
4243- 有序集合:集合里的元素可以根据 key 或 index 访问 (List、Map)
4344- 无序集合:集合里的元素只能遍历。(Set)
4445
4546
46- ##### HashSet 和 TreeSet 底层数据结构
47+ #### HashSet 和 TreeSet 底层数据结构
4748
4849** HashSet** 是哈希表结构,主要利用 HashMap 的 key 来存储元素,计算插入元素的 hashCode 来获取元素在集合中的位置;
4950
5051** TreeSet** 是红黑树结构,每一个元素都是树中的一个节点,插入的元素都会进行排序;
5152
5253
53- ##### 推荐文章
54+ #### 推荐文章
5455
5556- [ Java集合--Set(基础)] ( https://www.jianshu.com/p/b48c47a42916 )
5657
57- #### 3.2.3 List
58+ ### 3.2.3 List
5859
59- ##### 什么是List
60+ #### 什么是List
6061
6162在 List 中,用户可以精确控制列表中每个元素的插入位置,另外用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。 与 Set 不同,List 通常允许重复的元素。 另外 List 是有序集合而 Set 是无序集合。
6263
63- ##### List的常见实现类
64+ #### List的常见实现类
6465
6566** ArrayList** 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。
6667
@@ -70,25 +71,25 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
7071
7172** Stack** 是栈,它继承于Vector。它的特性是:先进后出(FILO, First In Last Out)。相关阅读:[ java数据结构与算法之栈(Stack)设计与实现] ( https://blog.csdn.net/javazejian/article/details/53362993 )
7273
73- ##### ArrayList 和 LinkedList 源码学习
74+ #### ArrayList 和 LinkedList 源码学习
7475
7576- [ ArrayList 源码学习] ( https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/ArrayList.md )
7677- [ LinkedList 源码学习] ( https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/LinkedList.md )
7778
78- ##### 推荐阅读
79+ #### 推荐阅读
7980
8081- [ java 数据结构与算法之顺序表与链表深入分析] ( https://blog.csdn.net/javazejian/article/details/52953190 )
8182
8283
83- #### 3.2.4 Map
84+ ### 3.2.4 Map
8485
8586
8687- [ 集合框架源码学习之 HashMap(JDK1.8)] ( https://juejin.im/post/5ab0568b5188255580020e56 )
8788- [ ConcurrentHashMap 实现原理及源码分析] ( https://link.juejin.im/?target=http%3A%2F%2Fwww.cnblogs.com%2Fchengxiao%2Fp%2F6842045.html )
8889
89- #### 3.2.5 树
90+ ### 3.2.5 树
9091
91- ##### 1. 二叉树
92+ #### 1. 二叉树
9293
9394[ 二叉树] ( https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科)
9495
@@ -98,25 +99,25 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
9899
99100(3)[ 平衡二叉树] ( https://baike.baidu.com/item/%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91/10421057 ) ——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
100101
101- ##### 2. 完全二叉树
102+ #### 2. 完全二叉树
102103
103104[ 完全二叉树] ( https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科)
104105
105106完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。
106107
107- ##### 3. 满二叉树
108+ #### 3. 满二叉树
108109
109110[ 满二叉树] ( https://baike.baidu.com/item/%E6%BB%A1%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科,国内外的定义不同)
110111
111112国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
112113
113- ##### 4. 堆
114+ #### 4. 堆
114115
115116[ 数据结构之堆的定义] ( https://blog.csdn.net/qq_33186366/article/details/51876191 )
116117
117118堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。
118119
119- ##### 5. 二叉查找树(BST)
120+ #### 5. 二叉查找树(BST)
120121
121122[ 浅谈算法和数据结构: 七 二叉查找树] ( http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html )
122123
@@ -127,11 +128,11 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
1271283 . 任意节点的左、右子树也分别为二叉查找树;
1281294 . 没有键值相等的节点(no duplicate nodes)。
129130
130- ##### 6. 平衡二叉树(Self-balancing binary search tree)
131+ #### 6. 平衡二叉树(Self-balancing binary search tree)
131132
132133[ 平衡二叉树] ( https://baike.baidu.com/item/%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科,平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等)
133134
134- ##### 7. 红黑树
135+ #### 7. 红黑树
135136
136137红黑树特点:
137138
0 commit comments