Java常见的数据结构——Java学习笔记
目录
前言:
数据结构是计算机存储和组织数据的方式。Java中的集合就是基于数据结构编写出来的,通过了解数据结构,我们再面对具体场景的时候,就能够用精心选择的数据结构可以带来更高的运行或者存储效率。
一、什么是数据结构?
数据结构(Data Structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。
简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。
二、我们为什么要了解数据结构?
以做一道名菜“佛跳墙”为例:
料理的一个环境 ------> 程序运行的时候的环境
做一道正宗“佛跳墙” ------> 项目的一个具体需求
料理的大厨 ------> 编写程序的程序员
料理的一些食材、器具 ------> 我们要编写的一行行的代码
“佛跳墙的菜谱” ------> 我们编写代码要用的数据结构
要想做出来的“佛跳墙”正宗、美味,就需要我们按照正宗菜谱的指导,分别用不同的方法料理我们的不同的食材。
不同的集合底层采用的数据结构也是不一样的,我们了解这些集合底层是基于哪些数据结构存储和组织数据,就能在具体情景下针对具体问题做出更匹配的选择。
三、Java中我们常见的数据结构是哪些?
常用结构有:栈、队列、数组、链表和红黑树。
栈(Stack)
概述:
它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。
特点:
栈的入口、出口的都是栈的顶端位置。
先进后出原则(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。
场景:
子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。
队列(Queue)
概述:
它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。
特点:
队列的入口、出口各占一侧。
先进先出原则(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。
场景:
射击子弹,先进入的子弹被先射出,然后再进入一颗子弹。
数组(Array)
概述:
是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。
特点:
查找元素快:通过索引,可以快速访问指定位置的元素
增删元素慢:数组无法改变长度,增删数组元素时,需要创建新数组,原数组元素根据新数组新的索引位置一一复制。
场景:
学校宿舍房间号,按照一层层从左往右一间间的顺序依次排好,根据房间号找到对应宿舍的人很快。但是要是更换房间号,就需要将全部楼层的都更换一次。
链表(Linked list)
概述:
由一系列结点Node(链表中每一个元素称为一个结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
特点:
查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素。
增删元素快:只需要修改连接元素的地址值即可。
场景:
我们手机上都存储有别人的手机号,要联系之前认识的一个人,但是没有他的手机号,就需要打电话找到有他手机号的人,再联系他。
我们要想以后继续联系,但是手机号码存储满了,就需要删除一个来保留这个手机号。
树(Tree)
概述:
树是典型的非线性结构,它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
特点:
没有父节点的节点称为根节点,每个数有且只有一个根节点。
每一个非根节点有且只有一个父节点。
每个节点有零个或多个子节点。
场景:
平衡二叉树(红黑树)
本文地址:https://blog.csdn.net/LinKin_Sheep/article/details/109292680