java中的数据结构

java中的数据结构有八种:

分别是:数组,栈,链表,图,散列表,队列,树,堆

每一种的数据结构都有着独特的数据存储方式,

数组

数组中可以存入多个连续的值,在内存中的分配也都是连续的,可以通过元素的下标访问,第一个下标为0

优点是:查询元素的速度快,遍历数组方便

缺点是:数组的大小固定后就不能再重新扩容了,数组中只能存入一种类型的值,添加和删除操作比较慢,因为修改一个值就要移动其他的值

使用场景:频繁的查询,对存储空间要求不大时,还有就是很少进行增加和删除的情况下

栈的结构就像一个集装箱,先放进去的东西最后才能拿出来,所以栈常用于实现递归功能方面

队列

队列和栈类似都是一个集装箱结构,只不过这个集装箱是两头开口的集装箱,是属于先进先出,因为这个先进先出的特点一般用于多线程阻塞队列管理

链表

链表存储的数据不是连续放置的,每一个元素的存储都是由上一个元素的指针引用,(指针可以看作成火车中间的连接,火车的结构就是一个典型的链表结构)根据指针的指向,可以形成不同的链表结构,如:单链表,双向链表,循环链表等。(单链表就像火车),(双向链表就是再原有的链表基础上再加一个指针,指向上一个元素形成一个双向绑定的结果)(循环链表可以看作是一群手拉手的小朋友,形成了一个圆形)

优点是:链表不需要初始化容量,可以任意的增加删除数据,链表再执行添加或删除操作时,只需要改变前后两个元素的指针指向位置即可。所以添加删除会很快

缺点是:因为含有大量的指针域,占用空间会很大,查找元素的时候只能通过遍历链表来查找非常耗时(查找的过程就像是玩解密游戏,只有找到这个谜题才可以前往下一个区域)

适用场景:数据量少,需要频繁的进行新增删除操作是

树这种数据结构是具有层级关系的,为什么要叫树结构,是因为他很像一个倒挂的树,根朝上,叶朝下,有以下的特点

  • 没有父节点的元素被称为根节点
  • 每一个非根节点的元素都有且只有一个父节点
  • 每一个节点都有零个或多个子节点
    在这里插入图片描述

在日常的应用中,讨论最多的树结构就是二叉树结构
在二叉树结构当中每一个元素都有两个子节点,分别是左子节点和右子节点,左右子节点是有顺序的,就算一个元素只有一个子树也要区分左右子树

二叉树结构之所以讨论的最多是因为它具有链表和数组的好处,是两者的优化方案,它的添加删除操作是很快的,而且在查询方面也有很多算法的优化,在处理大批量的动态数据时非常好用。树结构应用在多个层面,例如HashMap中的红黑树,MySQL中的B+树。
这里只是简单了解,树结构功能强大,想要学习的话还是要花大量时间来深入

散列表(哈希表)

散列表也叫哈希表,是通过键值对访问的(key和value),存储的位置为f(key)。f为散列函数,又称为哈希函数,而散列表就是把key通过一个固定的算法函数就是所谓的哈希函数转换为一个整数数字,然后将这个数字对这个数组的长度取余,区域的结果就是下标,value的值就存储在下标的数组空间中,这种存储方式可以利用数组的查找优势来查找元素,所以查找是很快的。这样说可能不是特别的清楚,可以看下图:
在这里插入图片描述
从图片中可以看到,左边是一个数组,每个数组的元素都有一个指针,指向一个链表的头。在这种链表中可能有许多元素,也可能一个元素也没有。我们是根据元素的一些特性吧元素分配到不同的链表中,也是根据这些特性找到正确的链表,再从链表中找到我们想要的数据。
哈希表的应用场景非常多,有一个很重要的问题就是哈希碰撞的问题,如果处理不好就会浪费大量的时间,导致你的系统崩溃

堆是一种比较特殊的数据结构,具有以下的特性

  • 堆中的某个节点的值总是不大于或者不小于其父节点的值
  • 堆是一颗完全的二叉树
    堆一般用于数组中的排列,成为对排列,不常用。。

图是一种比较复杂的结构,由边与顶点组成,其中边是可以有方向的。其中可以看到,站点1可以到站点2,而反之不行,那么就是说顶点1到顶点2是有方向的。有方向的图结构被称为有向图。还有一种边是没有方向的,被称为无向图。
在这里插入图片描述

下边是图的术语。。关于图的介绍就到这里,有兴趣自己深入

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值