java数据结构

1. 数组
特点:一段连续的内存空间
缺点:
1. 定长,无法扩容;
2. 只能储存一种数据类型;
优点:
1. 按照索引,查询快,时间复杂度O(1);
2. 因为是连续的内从空间,遍历快

2. 链表
特点:链表是一种物理存储单元上非连续、非顺序的存储结构。
链表由一些列结点组成,每个结点分为两部分:1、存放数据元素的数据域,2、存放下一个结点地址的指针域。
根据形式分为:1、单链表
2、循环链表(循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链)
3、双向链表(结点除含有数据域外,还有两个链域,一个存储直接后继结点地址,一般称之为右链域;一个存储直接前驱结点地址,一般称之为左链域。)
缺点:
1、大量指针域中存了大量的地址,占内存;
2、遍历时要从头到尾,时间复杂度O(n);
优点:
1、不需要初始化
2、可以添加任意类型的元素
3、插入或删除结点时,只要修改前后结点的指针域即可。
(LinkedList底层是双向链表,我们在插入或删除结点时,只需要调用.add、.addBefore、.remove等方法。关于结点的操作,是LinkedList内部做好的)。

3. 栈
栈按照“后进先出”、“先进后出”的原则来存储数据,先插入的数据被压入栈底,后插入的数据在栈顶,读出数据的时候,从栈顶开始依次读出
(01) Stack实际上也是通过数组去实现的。
执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。
执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。
执行pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。
(02) Stack继承于Vector,意味着Vector拥有的属性和功能,Stack都拥有。而且其实现压栈(push),弹栈(pop)等操作也是调用了Vector类中的方法。
在这里插入图片描述
4. 队列
队列会对两端进行定义,一端叫队头,另外一端就叫队尾。队头只允许删除操作(出队),队尾只允许插入操作(入队)。在这里插入图片描述
5. 树
每个节点都只有有限个子节点或无子节点;
没有父节点的节点称为根节点;
每一个非根节点有且只有一个父节点;
除了根节点外,每个子节点可以分为多个不相交的子树。
常见的树:

  1. 无序树
  2. 二叉树:完全二叉树,满二叉树,二叉查找树,平衡二叉树(红黑树是最常见的平衡二叉树),B树(MySql中重点使用B+Tree)

6. 堆
堆可以被看做是一棵树的数组对象,具有以下特点:
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

7. 图
图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)的集合。
**注意:**线性表可以是空表,树可以是空树,图不可以是空图,图可以没有边,但是至少要有一个顶点
分为:有向图,无向图,

8. 哈希表
哈希表(Hash Table),也叫散列表,是一种可以通过关键码值(key-value)直接访问的数据结构,它最大的特点就是可以快速实现查找、插入和删除。

数组的最大特点就是查找容易,插入和删除困难;而链表正好相反,查找困难,而插入和删除容易。哈希表很完美地结合了两者的优点, Java 的 HashMap 在此基础上还加入了树的优点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值