Java的数据结构

目录

数据结构:

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,图

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13459.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第11章:C语言数据结构与算法初阶之排序

系列文章目录 文章目录 系列文章目录前言排序的概念及其运用排序的概念常见的排序算法 常见排序算法的实现1.直接插入排序2. 希尔排序(缩小增量排序)3. 直接选择排序4. 堆排序5. 冒泡排序6. 快速排序将区间按照基准值划分为左右两半部分的常见方式&#…

<Linux开发>驱动开发 -之- Linux I2C 驱动

<Linux开发>驱动开发 -之- Linux I2C 驱动 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细…

flutter聊天界面-加号【➕】更多展开相机、相册等操作Panel

flutter聊天界面-加号【➕】更多展开相机、相册等操作Panel 在之前实现了flutter聊天界面的自定义表情的展示,这里记录一下更多操作展开的相机、相册等操作功能实现。 一、查看效果 更多操作展开的相机、相册等操作功能实现。 二、代码实现 展开的操作按钮可能比…

嵌入式基础知识-总线带宽

带宽,最容易想到的是上网用的网络带宽,在嵌入式软件开发中,也会用到带宽,这个带宽的含义就不一样了,区别是什么?本篇就来介绍一下,并通过一些例子来进行带宽的计算。 先来简单看下不同领域的带…

第二节 给SpringBootAdmin的server端加入spring security安全控制

前言 本来想用一节就写完SpringBootAdmin的,但随着研究的深入发现一节应该是不够的,网上的资料也不会非常系统,官网的例子有些已经好几年没更新了,所以接下来还是系统性的来写下吧 第一节 完成基础配置,暴露所有端点…

有AI助手帮你,刷任何题都不吃力!

Rider如何配置AI助手? 前言:一、选择AI助手二、如何在Rider中配置CodeWhisperer三、使用方法四、分享你的AI解决方案 明明自觉学会了不少知识,可真正开始做题时,却还是出现了“一支笔,一双手,一道力扣&…

html案例2

效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initia…

计算机网络 day4 IP地址的两部分-A、B、C、D、E五类IP地址-私有地址-子网掩码-DNA服务器-域名解析服务

目录 三创网络拓扑结构图&#xff1a; 普通家庭网络拓扑结构图&#xff1a;&#xff08;也可以直接使用 子母路由器 &#xff08;母&#xff1a;无线路由器&#xff09;&#xff08;子&#xff1a;信号放大器、中继器&#xff09;&#xff09; 网络层&#xff1a;&#xff0…

用颜色表示数据的第三个维度

横纵坐标显示时间和空间后&#xff0c;第三个数据的特征有时就不好表示了&#xff0c;3d图有的时候看起来更复杂。对于某些情况&#xff0c;用颜色来表示更加简洁。 这里展示的效果图有点像烟花&#xff0c;所以选了这张&#xff0c;但是换其他的cmap才能使得数据展示更加直观 …

DDR3 控制器 MIG IP 详解完整版 (nativeVIVADOVerilog)

文章目录 前言一、MIG IP 核的配置二、MIG 交互的接口三、常用IP例化值四、小实验传图 前言 本节主要是介绍 Xilinx DDR 控制器 IP 的创建流程、IP 用户使用接口 native 协议介绍和IP 对应的 Example Design 的仿真和上板验证。。 提示&#xff1a;以下是本篇文章正文内容&…

如果遇到洪灾导致网络瘫痪,对讲机能起到什么作用?

当我们遇到洪灾这种突发事件时&#xff0c;网络基本就会处于瘫痪状态&#xff0c;人们的安全和生命也将面临着极大的威胁。而在这种时候&#xff0c;一种看似普通的通讯工具&#xff0c;却能够成为拯救生命的关键&#xff0c;它就是——对讲机&#xff01; 网络已经成为我们生…

关于深度学习图像数据增广

数据增广方法在广义上可以按照产生新数据的方式分为数据变形和数据过采样。由于操作简单&#xff0c;同时数据量上的需求远比现在要低得多&#xff0c;早期对数据增广的应用多是数据变形类方法。对于图像数据&#xff0c;基本的图像变换操作都属于数据变形类增广方法&#xff0…