“这是我参与8月更文挑战的第22天,活动详情查看: 8月更文挑战”
上一篇(传送门)咱们学习了Java 数据结构中的堆栈、数组以及队列,本篇我们就来继续学习Java中的数据结构的链表以及红黑树。
链表
链表:linked list,由一系列结点node (链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
我们常说的链表结构有单向链表与双向链表,那么这里给大家介绍的是单向链表。
简单的说,采用该结构的集合,对元素的存取有如下的特点∶
-
多个结点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。
-
查找元素慢∶想查找某个元素,需要通过连接的节点,依次向后查找指定元素。
-
增删元素快 。增加元素:只需要修改连接下个元素的地址即可。
红黑树
说红黑树我们先来了解什么是二叉树。
-
二叉树: binary tree ,是每个结点不超过2的有序树( tree ) 。 简单的理解,就是一种类似于我们生活中树的结构,只不过每个结点上都最多只能有两个子结点。 二叉树是每个节点最多有两个子树的树结构。顶上的叫根结点,两边被称作"左子树"和"右子树"。
-
二叉查找树:一种特殊的二叉树,所有的左孩子都小于右孩子。查询速度很快。
红黑树是一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。
红黑树的特性:
- (1)每个节点或者是黑色,或者是红色。
- (2)根节点是黑色。
- (3)每个叶子节点是黑色。
- (4)如果一个节点是红色的,则它的子节点必须是黑色的。
- (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
特性(5)确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树。
红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。 例如,Java集合中的TreeSet和TreeMap。
写在最后
好了,关于链表和红黑树我们就一起学习到这里,到此我们已经把java中的数据结构已经介绍完了,如有不足之处,欢迎掘友们批评指正!