谈谈你对Java数据结构的理解(数组、链表、队列、栈、堆、树、图)

一、数组

  • 数组存放在一块连续的内存空间中;

  • 由有限个相同类型的变量所组成的有序集合,按一定的顺序储存;

  • 查找速率快,利用索引的方式进行查找,第一的元素的索引为0,插入和删除的速率较慢,因为需要移动大量的节点;

  • 定义动态数组

  • 数组常用方法主要为增(add)删(remove)改(set)查(put)长度(size)

二、链表

  • 链表中的元素可存储在内存的任何地方(每个元素存储了下一个元素的地址),无序储存;

  • 插入和删除速率较快,但查找速率慢;

  • 在我们需要读取链表某一个元素的时候,不能直接读取,因为不知道它所处的地址,必须先访问第一个元素,从中获取第二个元素的地址,以此类推直到访问到该元素,所以效率很低;但需要同时读取所有元素时,链表的效率很好。

  • 可用于创建树

  • 常用方法用数组相似

三、队列

  • 队列是一种线性逻辑结构,可以用数组实现,也可以使用链表实现。

  • 队列包含入队和出队的事件,遵循先入先出的原则(FIFO)

  • 主要方法:

  • 增加 add(),offer()
    取出头结点 remove(),poll()
    获得头结点 element()、peek()
    大小 size()
    特点 先进先出

四、栈

  • 栈是一种先进后出的数据结构,数组和链表都可以生成栈。当数据进入到栈时会按照规则压入到栈的底部,再次进入的数据会压在第一次的数据上面,以此类推。

  • 在取出栈中的数据的时候会先取出最上面的数据,所以是先进后出。

  • 由于数组和链表都可以组成栈,所以操作特点就需要看栈是由数组还是链表生成的了,然后就会继承相应的操作特点。

五、树

树是典型的非线性结构,在树的结构中,有且仅有一个根结点,该结点没有前驱结点。在树结构中的其他结点都有且仅有一个前驱结点,而且可以有两个以上的后继结点

六、图

一种非线性结构。在图形结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系堆

七、堆

堆是一种特殊的树形数据结构,每个结点都有一个值,特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆

猜你喜欢

转载自blog.csdn.net/FanZaiYo/article/details/121464339