Java的数据结构

13 篇文章 0 订阅
7 篇文章 0 订阅

目录

数据结构:

1,数组

2,链表

3,哈希表

4,队列

5,堆

6,栈

7,树

8,图


数据结构:

1,数组

        优点:

                查找元素的速度很快;

                按照索引来遍历数组的速度也很快。

        缺点:

                数组大小无法改变,一旦创建就无法扩容;

                数组只能存储一种数据类型的数据;

                插入、修改、删除时比较麻烦,要移动其他的元素。

2,链表

        链表是一种递归类型的数据结构,它可以为空,或者指向一个节点的引用,该节点还有另外一个元素和一个指向另外一条链表的引用。

        优点:

                不需要初始化容量;

                可以快速的修改、删除、插入元素。

        缺点:

                含有大量的引用,占用的内存空间大;

                查找慢。

3,哈希表

        也叫做散列表,是通过K-V的形式来存储数据的。是数组和单向链表的组合,它结合了二者的优点,避免了缺点。

        它的底层就是一个数组,但是数组之中的每一个元素都是一个单向链表。

        map.put(k,v)

        v=map.get(k)        

        以上两个方法的原理比较重要。

        put:

                首先,调用k的hashCode()方法,将hash值算出来,然后将hash值通过哈希算法将其转换为数组的下标。

                如果下标处为null,那就将数据插入,如果下标不为null,将调用equals()方法,如果又返回false,将value插入到链表的末尾,如果为true,就将数据覆盖。

        get:

                首先,调用k的hashCode()方法,将hash值算出来,然后将hash值通过哈希算法将其转换为数组的下标。

                通过下标快速定位,如果为这个位置什么都没有就返回null,如果有就调用equals(),如果链表上所有的k都为false,那就返回null,负责true,就返回出这个value。

4,队列

        先进先出。

        有两个端口,前面是队头(出口),后面是队尾(入口)。

        队头只允许删除操作(出队),队尾只允许插入操作(入队)。

5,堆

        堆可以被看做是一棵树的数组对象。

        堆总是一棵完全二叉树,将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

6,栈

        先进后出。

        先插入的数据被压入栈底,后插入的数据在栈顶,读出数据的时候,从栈顶开始依次读出。

7,树

        是一种非线性结构,由n个有限的节点组成一个具有层次关系的集合。

        每个节点都只有有限个子节点或无子节点;

        没有父节点的节点称为根节点;

        每一个非根节点有且只有一个父节点;

        除了根节点外,每个子节点可以分为多个不相交的子树。

        平衡二叉树,红黑树。

8,图

        非线性结构,由顶点的有穷非空集合和顶点之间边的集合组成。

        在线性结构中,数据元素之间满足唯一的线性关系,每个数据元素(除第一个和最后一个外)均有唯一的“前驱”和“后继”;

        在树形结构中,数据元素之间有着明显的层次关系,并且每个数据元素只与上一层中的一个元素(父节点)及下一层的多个元素(子节点)相关;

        而在图形结构中,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会Java的MING

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值