java进阶——day03-1 List、Set、数据结构、Collections
数据结构
常见的数据结构
栈(stack)
栈:stack又称堆栈,他是运算受限的线性表,其限制是仅允许在标的一段进行插入和删除操作,不允许在其他任何位置进行增、删、改等操作。
特点:
1、先进后出:先存的元素,后面才能取出(类似于子弹压枪 先压进的子弹 后射出)
2、栈的出入口都是栈的顶端位置

注意:
压栈:存元素,把元素存储到栈顶位置,栈中已有元素向栈底移动一个位置
弹栈:取元素,把存储在栈顶的元素取出来,占中已有元素向栈顶移动一个位置
队列(queue)
队列:简称队,同栈一样是受限的线性表,其限制是仅允许一端插入,另一端删除
特点:
1、先进先出:即存进的元素,先存的元素先出来(类似地铁安检机 先放的行李先检测)
2、队列的入口、出口各站一侧。

数组(Array)
数组:Array,是有序的元素序列,数组是在内存中开辟了一段连续的空间,并在此空间存放元素。
特点
1、查找快:通过索引,可以快速访问指定位置的元素

解析:为什么查询快?因为存在数组中的每个元素,就像酒店入住的人,通过房间号码,就能快速找到里面住的人
2、增删慢:
a、指定索引位置添加元素
需要创建新一个新数组,把原数组元素,复制到新数组对应索引的位置。

在堆内存中 创建数组-->复制数组的元素到新数组-->旧数组销毁(增删慢)
b、指定索引位置删除元素
需要创建新数组,把原数组元素根据索引,复制到数组对应索引的位置,原数组指定索引位置不复制到新数组。

链表
链表:linked list,由一系列结点node(链表中每一个元素称为结点)组成,节点可以在运行时动态生成。
节点包含两部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。

解析:多个节点,通过地址连接,就像多个人手拉手,右手(自己的地址) 身体(数据) 右手(下一个节点的地址)
特点:
查找慢:因为他没有索引,所以想要查找某个元素,需要通过连接的节点地址,一个个向后找。
增删快:
添加元素:只需要修改连接下一个元素的地址即可(换个人的手牵)


删除元素:只需要修改连接下一个元素的地址即可(换个人的手牵)

红黑树(二叉树)
二叉树:binary tree,是节点不超过2的有序tree
简单理解,就是类似与生活中的树,只不过最多只能有两个树干而已
如图:

红黑树的约束(了解)
2、根节点是黑色的
3、叶子节点(特指空节点)是黑色的
4、每个红色节点的子节点都是黑色的
5、任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同
特点:
速度特别快趋近平衡数,查找叶子元素最少和最多次数不多于2倍。
平衡树:左子树 = 右子树(数量相等)

浙公网安备 33010602011771号