??当我们使用着Java官方给你提供的容器的时候,我们用起来还是非常好的,ArrayList其实就是一个无限扩充的数组,LinkedList其实就是一个无限扩充的数组,LinkedList其实就是一个链表。
??现实世界中存储数据,我们要通过一些工具或者建模来进行存储。每种数据结构都有自己的优缺点。
??而算法,在这么多的数据中如何以最快的速度实现插入、删除、查找数据问题。
??我们Java语言是一种面向对象的编程语言,Java就相当于自动挡汽车,C语言就相当于手动挡汽车。数据结构呢?
??数据结构就相当于变速箱的工作原理,不懂数据结构原理的,对于开发Java程序也是没有任何问题,
??如果你懂变速箱的原理,那么不但可以开车,也可以修车,还可以造车。
??数据结构内容非常多,我们介绍Java当中常见的数据结构:堆栈、队列、数组、链表和红黑树一一给大家介绍下。
??数据存储的常用结构:栈、队列、数组、链表和红黑树
栈:又称堆栈,它是运算受限的线性表结构,它的限制是仅允许在标的的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。
简单的说,采用该结构的集合,对元素的存取有一下特点:
压栈:就是存储元素,把元素存储到栈的顶端位置,栈中已有的元素依次向栈底方向移动一个位置。
弹栈:就是取出元素,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。
?队列:queue,简称对,它同堆栈几乎一样的,也是一种运算受限的线性表结构,它的限制是仅允许在标的的一端进行插入,在标的的另一端进行删除。
简单的说,采用该结构的集合,对元素的存取有以下特点:
先进先出( 存进去的元素,要在它前面的元素依次取出后,才能取出该元素)。例如:火车过山洞,火车头先进山洞,火车头先从山洞出来,车尾后进来,最后出来
队列的入口、出口各占一侧。
??生活中的酒店,酒店当中的房间号是连续的,不间断,有50个房间,从001---050每个房间都有固定编号,通过编号就可以快速找到酒店房间的住户。
?简单的说,采用此结构的集合,对元素存取有以下特点:
?查找元素快:通过索引,可以快速的访问到指定位置的元素。
?增删元素慢:
?指定索引位置增加元素:需要创建一个新数组,将指定的新元素存储到指定的索引位置,再把源数组元素根据他原来的索引,复制到新数组对应的索引位置。
指定索引位置删除元素:需要创建一个新数组,把源数组当中的元素根据索引,复制到新数组对应索引的位置,源数组中指定的索引位置元素不复制到新数组当中。
原理图如下:
?链表:linked list,由一系列结点node(链表当中的每个元素称为结点)组成,结点可以在运行时动态生成。每个结点包含两个部分:一个是用于存储数据元素的数据域,另一个是用来存储下一个结点地址的指针域。我们常说的链表结构有单向链表和双向链表
简单的说,采用此结构的集合,对元素的存取有以下特点:
?多个结点之间,通过地址进行连接。比如:多个人玩丢手绢,每个人右手拉住下一个人的左手,上一个人的左手拉住该人的右手。依次类推,多个人就被连接起来。
查找元素比较慢:想要查找某个元素,需要通过连接的结点,依次向后查询指定的元素。
? 删除元素比较快:
?简单的理解,就是类似于我们生活中的树的结构,只不过每个节点上都最多只能有两个子节点。
?顶上的节点称为根节点,两边的被称为“左子树”和“右子树”
?在二叉树中有一种比较特殊树结构叫做红黑树,红黑树本身就是一个二叉树
红黑树的约束:
? ###红黑数的特点:
??查询速度非常快,趋近于平衡树,查找叶子元素最小和最大不能超过2倍。
原文:https://www.cnblogs.com/luayan/p/14090883.html