Java的数据结构

news2024/11/18 7:25:15

目录

数据结构:

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.coloradmin.cn/o/730034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1-软件测试答疑

目录 1.什么是软件测试? 1.1.生活中测试场景 1.2.软件测试定义 1.3.为什么要有软件测试?/重要性 1.4.练习:软件系统登录功能如何测试? 1.5.软件测试的特点 2.软件测试和开发的区别 2.1.工作内容 2.2.技能要求 2.3.难易程…

spring监视器actuator

引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><…

第五章 神经网络与手写体识别

文章目录 第五章 神经网络5.1神经元模型5.2感知机与多层网络5.3误差逆传播算法5.4全局最小和局部最小5.5其他常见神经网络5.5.1RBF网络5.5.2ART网络5.5.3SOM网络5.5.4级联相关网络5.5.5Elman网络5.5.6Boltzmann机 5.6深度学习5.7实验&#xff1a;手写数字识别 第五章 神经网络 …

【QT】——QJson类的使用

目录 1.Json的格式 1.1.Json数组 1.2.Json对象 2.QJson 2.1 QJsonObject 2.2 QJsonValue 2.3 QJsonArray 2.4 QJsonDocument 3.示例 3.1 写操作 3.2 读操作 1.Json的格式 Json的基本概念 Json 是一种数据格式&#xff0c;和语言无关&#xff0c;在什么语言中都可以…

Host is not allowed to connect to this MySQL server

问题:win10 系统上运行node&#xff0c;运行提示&#xff1a;Host is not allowed to connect to this MySQL server。 在windows10上面装完MySQL8.0.28&#xff0c;发现本地可以使用Navicat进行连接 &#xff0c;但是在vue项目中调用node接口连接mysql却报错Host is not all…

Python学习笔记(十五)————文件操作相关

目录 1&#xff09;文件编码 2&#xff09; 文件的读取 ①open()打开函数 ② mode常用的三种基础访问模式 ③读操作相关方法 read()方法&#xff1a; readlines()方法&#xff1a; readline()方法&#xff1a;一次读取一行内容 for循环读取文件行 close() 关闭文件对象 wi…

simulink 结构体 bus creator

目录 结构体创建 bus creator 结构体引用Bus Selector 结构体赋值Bus Assignment 结构体对象 Bus 结构体数组打包Vector Concatenate 结构体数据存文件 结构体创建 bus creator 结构体引用Bus Selector 结构体赋值Bus Assignment 结构体对象 Bus 结构体数组打包Vector Co…

【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】

分析慢SQL的步骤 慢查询的开启并捕获&#xff1a;开启慢查询日志&#xff0c;设置阈值&#xff0c;比如超过5秒钟的就是慢SQL&#xff0c;至少跑1天&#xff0c;看看生产的慢SQL情况&#xff0c;并将它抓取出来explain 慢SQL分析show Profile。&#xff08;比explain还要详细…

手搭手入门Spring boot+Mybatis+达梦数据库(国产数据库)

环境介绍 软件版本DM数据库dm8_20230418_x86_win_64IDEAIntelliJ IDEA 2022.2.1JDK1.8Spring Boot2.7.13mybatis2.3.1 达梦&#xff08;国产数据库&#xff09;可以将数据库名和表名自动转换为大写(注意&#xff01;&#xff01;创建达梦数据库实例的时候配置是否有勾选大小写…

Android Glide自定义AppGlideModule,让Glide在app启动后基于定制化GlideModule加载,kotlin

Android Glide自定义AppGlideModule&#xff0c;让Glide在app启动后基于定制化GlideModule加载&#xff0c;kotlin project的build.gradle: buildscript {repositories {maven {url uri("https://plugins.gradle.org/m2/")}}dependencies {classpath("org.jet…

Maven高级(二)--继承与版本锁定

一.继承 1.目的&#xff1a;不同模块中经常需要用到同一个依赖&#xff0c;这样要在每个pom.xml中都引入对应的坐标&#xff0c;继承可以用来解决依赖引入重复的问题。 2.实现&#xff1a;我们可以在创建一个父工程&#xff0c;然后将多个模块来继承这个父工程。然后再将各个模…

功能需求-前端在合同页面显示图片印章

需求描述 需要在项目中的合同页面的指定位置显示一个配置好的图片印章&#xff0c;实现好的效果&#xff0c;如下&#xff1a; 实现方案 使用使用CSS的绝对定位position来实现&#xff0c;代码如下&#xff1a; <div id"FatherBuyer"><img :src"s…

SpringAOP切面是否可以改变被代理方法的返回类型?

SpringAOP切面能不能改变被代理方法的返回类型&#xff1f; 注意&#xff0c;这里的AOP使用的aspectjweaver <!--AOP核心依赖aspectjweaver--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></de…

【C++】 Qt-线程进程

文章目录 进程&#xff08;process&#xff09;线程&#xff08;Thread&#xff09;创建线程 进程&#xff08;process&#xff09; 在任务管理器中能看到进程Tab页下&#xff0c;将所有进程分为三类&#xff1a; 应用&#xff1a;打开的正在运行的软件。后台进程&#xff1a…

STM32寄存器点亮LED灯

一&#xff1a; 如何寄存器点灯 1&#xff1a;看单片机的原理图 找到LED灯 这个灯是 PB5引脚 看原理图可以看出 让GPIOB5输出低电平 就能点亮那么我们得让打开控制GPIOB5的时钟让GPIOB5 输出模式让GPIOB5低电平 二&#xff1a;看中文参考手册配置寄存器 2.1&#xff1a;打开管…

python与深度学习——基础环境搭建

一、安装jupyter notebook Jupyter Notebook是一个开源的交互式笔记本环境&#xff0c;可以用于编写和执行代码、创建可视化效果、展示数据分析结果等。我们在这里用它实现代码运行和观察运行结果。安装jupyter notebook实质上是安装Anaconda,后续还要在Anaconda Prompt中使用c…

AI视频智慧安监平台EasyCVR每次重启服务短时间播放后又无法播放,是什么原因?

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的设备接入、视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务。平台开放度高、兼容性强、可支持灵活拓展与第三方集成。 有用户反馈&#xff0c;EasyCVR每次重启服务后&#xff0c;可以短…

操作系统11:虚拟存储器

目录 1、虚拟存储器概述 &#xff08;1&#xff09;常规存储管理方式的特征和局部性原理 1.1 - 常规存储器管理方式的特征 1.2 - 局部性原理 1.3 - 虚拟存储器的基本工作情况 &#xff08;2&#xff09;虚拟存储器的定义和特征 2.1 - 虚拟存储器的定义 2.2 - 虚拟存储器…

【缓存中间件】Redis哈希槽的概念

数据分布理论 分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题&#xff0c;即把数据集划分到多个节点上&#xff0c;每个节点负责整体数据的一个子集。。 需要重点关注的是数据分区规则。常见的分区规则有哈希分区和顺序分区两种&#xff0c;哈希分区离散…

项目集成支付宝报错:调试错误,请回到请求来源地,重新发起请求。 错误代码invalid-app-id错误原因:无效的ApplD参数

问题 项目集成支付宝报错&#xff1a;调试错误&#xff0c;请回到请求来源地&#xff0c;重新发起请求。 错误代码invalid-app-id错误原因:无效的ApplD参数 详细问题 笔者按照支付宝沙箱支付快速集成版进行操作&#xff0c;操作完成访问所集成的支付宝&#xff0c;页面如下 …