【Java数据结构】---初始数据结构
乐观学习,乐观生活,才能不断前进啊!!!
我的主页:optimistic_chen
我的专栏:c语言 ,Java
欢迎大家访问~
创作不易,大佬们点赞鼓励下吧~
前言
从今天开始我们就要学习Java的数据据结构部分,根据前面Java语法的基础上,更加深入的了解算法的基本知识。
文章目录
- 前言
- 什么是数据结构?
- 集合框架
- 容器具体的数据结构
- 如何学好数据结构?
- 时间复杂度和空间复杂度
- 时间复杂度
- 大O的渐进表示法
- 推导大O阶方法
- 空间复杂度
- 完结
什么是数据结构?
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的
集合。
集合框架
Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes
Java当中已经实现好的一些集合类(数据结构)
我们总体的学习框架如下图所示:

容器具体的数据结构
- Collection:是一个接口,包含了大部分容器常用的一些方法
- List:是一个接口,规范了ArrayList 和 LinkedList中要实现的方法
ArrayList:实现了List接口,底层为动态类型顺序表
LinkedList:实现了List接口,底层为双向链表 - Stack:底层是栈,栈是一种特殊的顺序表
- Queue:底层是队列,队列是一种特殊的顺序表
- Deque:是一个接口
- Set:集合,是一个接口,里面放置的是K模型
HashSet:底层为哈希桶,查询的时间复杂度为O(1)
TreeSet:底层为红黑树,查询的时间复杂度为O( ),关于key有序的 - Map:映射,里面存储的是K-V模型的键值对
HashMap:底层为哈希桶,查询时间复杂度为O(1)
TreeMap:底层为红黑树,查询的时间复杂度为O( ),关于key有序
如何学好数据结构?
首先要有代码量,只有写的代码足够多才慢慢熟悉数据结构的基本要领;其次,学习中要时刻记得画图,做题前先画图是一个“小白”的必经之路;之后学习的过程就是总结的过程,每学到一个章节要知道总结,最后才会变成自己的东西;最后要大量刷题,我推荐两个刷题的网站力扣(LeetCode),牛客建议由易到难,由简单到复杂,慢慢来,刚开始一定慢。
时间复杂度和空间复杂度
解决一个问题有多种算法,那么就一定有最高效的算法,这就是算法效率:第一种是时间效率,第二种是空间效率。 但是实际上,只要能解决问题的算法都是好算法。
时间效率(时间复杂度):时间复杂度主要衡量的是一个算法的运行速度
空间效率(空间复杂度):空间复杂度主要衡量一个算法所需要的额外空间
时间复杂度
时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个数学函数,它定量描述了该算法的运行时间.一个算
法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。
大O的渐进表示法
大O符号:是用于描述函数渐进行为的数学符号。
void func1(int N){int count = 0;for (int i = 0; i < N ; i++) {for (int j = 0; j < N ; j++) {count++;}}for (int k = 0; k < 2 * N ; k++) {count++;}int M = 10;while ((M--) > 0) {count++;}System.out.println(count);
}
Func1 执行的基本操作次数 :F(N)=N²+2*N+10
推导大O阶方法
- 用常数1取代运行时间中的所有加法常数。
- 在修改后的运行次数函数中,只保留最高阶项。
- 如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
使用大O的渐进表示法以后,func1的时间复杂度为:O(N²)
在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)
代码示例:
示例1:
void func2(int N) {int count = 0;for (int k = 0; k < 2 * N ; k++) {count++;}int M = 10;while ((M--) > 0) {count++;}System.out.println(count);
}
示例1基本操作执行了2N+10次,通过推导大O阶方法知道,时间复杂度为 O(N)
示例2:
void func3(int N, int M) {int count = 0;for (int k = 0; k < M; k++) {count++;}for (int k = 0; k < N ; k++) {count++;}System.out.println(count);
}
示例2基本操作执行了M+N次,有两个未知数M和N,时间复杂度为 O(N+M)
示例3:
void bubbleSort(int[] array) {for (int end = array.length; end > 0; end--) {boolean sorted = true;for (int i = 1; i < end; i++) {if (array[i - 1] > array[i]) {Swap(array, i - 1, i);sorted = false;}}if (sorted == true) {break;}}
}
示例3基本操作执行最好N次,最坏执行了(N(N-1))/2次,通过推导大O阶方法+时间复杂度一般看最坏,时间复杂度为 O(N²)*
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。 空间复杂度算的是变量的个数,也使用大O渐进表示法。
代码示例:
示例1:
void bubbleSort(int[] array) {for (int end = array.length; end > 0; end--) {boolean sorted = true;for (int i = 1; i < end; i++) {if (array[i - 1] > array[i]) {Swap(array, i - 1, i);sorted = false;}}if (sorted == true) {break;}}}
示例1使用了常数个额外空间,所以空间复杂度为 O(1)
示例2:
int[] func4(int n) {long[] array = new long[n + 1];array[0] = 0;array[1] = 1;for (int i = 2; i <= n ; i++) {array[i] = array[i - 1] + array [i - 2];}return array;
}
示例2动态开辟了N个空间,空间复杂度为 O(N)
完结
好了,到这里Java语法部分就已经结束了~
如果这个系列博客对你有帮助的话,可以点一个免费的赞并收藏起来哟~
可以点点关注,避免找不到我~ ,我的主页:optimistic_chen
我们下期不见不散~~Java
下期预告: Java【数据结构】----泛型
相关文章:
【Java数据结构】---初始数据结构
乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 ,Java 欢迎大家访问~ 创作不易,大佬们点赞鼓励下吧~ 前言 从今天开始我们就要学习Java…...
MySQL--主从复制
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、什么是主从复制 1、定义 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一…...
Linux RT调度器之负载均衡
RT调度类的调度策略是:保证TopN(N为系统cpu个数)优先级的任务可以优先获得cpu资源。除了在任务选核时通过基于cpu优先级的选核策略保证这一点外,还有其它流程,我们姑且将这部分流程称作RT调度器的负载均衡(…...
pwn学习笔记(8)--初识Pwn沙箱
初识Pwn沙箱 沙箱机制,英文sandbox,是计算机领域的虚拟技术,常见于安全方向。一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系…...
Day18_2--Vue.js Ajax(使用 Axios)基础入门学习
Vue.js 中的 Ajax 请求(使用 Axios) 什么是 Axios? Axios 是一个基于 Promise 的 HTTP 客户端,可以用于浏览器和 Node.js 环境中。它是现代化的 Ajax 库,用来替代传统的 XMLHttpRequest。 为什么选择 Axios…...
windows11远程桌面如何打开
随着远程办公的普及,选择合适的远程桌面工具变得尤为重要。在Windows 11上,用户可以利用系统自带的远程桌面功能,或选择更专业的第三方解决方案,如Splashtop。本文将详细介绍如何在Windows 11上启用远程桌面,并对比Win…...
qt代码显示,包含文本颜色设置等
QScintilla 安装示例代码参考链接 安装 最近发现了一个有趣的库,qt的插件库,之前一直以为显示代码时是重写QTextEdit来实现的,结果qt有现成的一个库来显示这些东西,在此记录一下 # 安装 QScintilla pip install QScintilla示例代码…...
抽象代数精解【6】
文章目录 简单密码算法模运算数学定义置换移位代换仿射 参考文献 简单密码算法 模运算数学定义 模m剩余类集 Z m Z_m Zm 设∀a,b∈Z(整数),m为正整数 m|b-a ,称a R b R满足反身性、对称性、传递性 1、R为同余关系,…...
如何选择合适的PCB材料?FR4、陶瓷、还是金属基板?
选择合适的PCB材料对于电路板的性能、可靠性和成本至关重要。不同的PCB材料具有不同的特性,适用于不同的应用场景。 01 FR4(玻璃纤维环氧树脂) FR4的特点: 广泛应用:FR4是最常见的PCB基板材料,广泛应用…...
PXE学习及其简单应用
一、PXE 的定义 PXE 是一种基于网络的启动技术,最初由 Intel 开发,旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中,允许计算机从网络服务器下载并启动操作系统或其他软件。 二、PX…...
【Python】把list转换成json文件(list中为字典,元素按行写入)
0.前言 数据需要处理成与大模型输入相同类型的数据,从csv文件读出后,想要转换成json文件,看了好多资料都是把整个list写入了json,并不是我想要的格式,这里记录一下最后的按行写入的格式。 1.list转json import json …...
《机器人SLAM导航核心技术与实战》第1季:第8章_激光SLAM系统
视频讲解 【第1季】8.第8章_激光SLAM系统-视频讲解【第1季】8.1.第8章_激光SLAM系统_Gmapping算法-视频讲解【第1季】8.2.第8章_激光SLAM系统_Cartographer算法-视频讲解【第1季】8.3.第8章_激光SLAM系统_LOAM算法-视频讲解 第1季:第8章_激光SLAM系统 先 导 课第…...
【安当产品应用案例100集】005-安当ASP实现Exchange双因素登录认证
Exchange双因素登录通过增加额外的安全验证层,可以有效提高企业邮箱系统的安全性,减少了数据泄露和账号被盗的风险,同时也符合了日益严格的安全合规要求。 其必要性主要体现在以下几个方面: 提高安全性:传统的用户名…...
【Bug】Pytorch RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly
【Bug1】RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly 知乎:https://zhuanlan.zhihu.com/p/712407893 环境 Windows 11 Python 3.10 torch 2.0.1 numpy 1.25.0问题详情 在使用 PyTorch 的 DataLoader 时出现的错误。详情 RuntimeError:A…...
谈谈冯诺依曼体系
我们都知道冯诺依曼体系这张图最为代表性,而接下来我们就来浅谈一下各部分之间的作用~ 输入设备:键盘,磁盘,网卡,话筒等等 输出设备:磁盘,网卡,声卡,显示屏等等 这些硬件…...
第十二章 元数据管理10分
12.1 引言 如果没有元数据,组织可能根本无法管理其数据。 ISO/IEC11179 元数据注册标准。 元数据管理原则:应归尽归,应收尽收。衡量标准:目录是否完整。(去第十二章 元数据管理)。 主数据管理:主…...
eco_tracker
特征 VGG是第一个提出使用块的想法,通过使用循环和子程序,可以很容易地在任何现代深度学习框架的代码中实现这些重复的架构。 原始VGG网络有5个卷积块,其中前两个块各有一个卷积层,后三个块各包含两个卷积层。 第一个模块有64个…...
electron 鼠标事件
版本:"electron": "^22.3.27",实现一个在windows下图片点击右键,使用electron打开的功能。 一、注册表操作 注册表工具类 const cp require("child_process"); const { app } require(electron/remote) e…...
网络安全第一次作业(ubuntuan安装nginx以及php部署 and sql注入(less01-08)))
ubuntuan安装nginx以及php部署 1.安装依赖包 rootadmin123-virtual-machine:~# apt-get install gcc libpcre3 libpcre3-dev zliblg zliblg-dev openssl libssl-dev2.安装nginx 到https://nginx.org/en/download.html下载nginx 之后将压缩包通过xtfp传输到ubuntu的/usr/loc…...
【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】017 - init_sequence_f 各函数源码分析(一)
【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】017 - init_sequence_f 各函数源码分析(一) 一、setup_mon_len():配置 gd->mon_len 监控长度二、fdtdec_setup() :设备树初始化,配置 gd->fdt_blob 指向uboot镜像末尾的 device tree三、【RK3568未跑】trace_early…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法
使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...
以太网PHY布局布线指南
1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...

乐观学习,乐观生活,才能不断前进啊!!!