Java数据结构1

Java数据结构告诉你如何选用数据集合(1) 开始学习编程的时候,目的在于如何实现功能。在我们熟悉编程之后,发现实现的方法是多种多样的。我们操作一个班级,可以选择数组、List、Set甚至于Map。但是具体实行起来,会发现情况复杂多变。而这个时候,实现方法的多样性也让我们束手无策。这个时候就需要数据结构登场了,学习数据结构我们就可以根据不同的情况选取最优的实现方法。当然了,还有一部分工作要结合软件工程和设计模式来实现。 下面我们来了解一下几... 阅读详情

目录

1.初识数据结构

2.衡量算法的好坏

3.包装类和泛型

一,什么是数据结构

1.数据结构,就是电脑存放数据的「收纳整理方法」

2.数据结构 = 数据怎么摆 + 数据怎么拿

二,算法效率

1.算法效率分析分为两种:第⼀种是时间效率,第⼆种是空间效率。时间效率被称为时间复杂度,⽽空间效率被称作空间复杂度。

时间复杂度

时间复杂度:算法的时间复杂度是⼀个数学函数,算法中的基本操作的执⾏次数,为算法的时间复杂度。因为我们只需要一个大概的数字,所以引出了⼤O的渐进表⽰法,用O(N)来表示,O里面数字一般是N,并且我们通常比的是最坏的情况

大O的渐进表示法:

1、⽤常数1取代运⾏时间中的所有加法常数。

2、在修改后的运⾏次数函数中,只保留最⾼阶项。

3、如果最⾼阶项存在且不是1,则去除与这个项⽬相乘的常数。得到的结果就是⼤O阶。

接下来我举几个例子

例一:

// 计算func2的时间复杂度? 
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);
}

答:总执行次数为2N+10,根据计算的法则,只保留最高阶2N,系数2变为1,得到的结果为O(N)

例二:

// 计算func3的时间复杂度? 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);

答:O(M+N)

我们现在来看常见的空间复杂度计算(冒泡排序,二分查找,递归,斐波那契)

一:冒泡排序

// 计算bubbleSort的时间复杂度? 
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;
 } 
}
}

答:假设数组长度是N,以最坏情况来考虑,数组完全是倒序的,第一次要换N-1次,到最后一次换1次,就是(N-1)+(N-2)+(N-3)........+1=(N-1+1)*(N-1)/2=(N^2-N)/2,根据法则就是O(N^2)

二:二分查找

int binarySearch(int[] array, int value) {
 int begin = 0;
 int end = array.length - 1;
 while (begin <= end) {
 int mid = begin + ((end-begin) / 2);
 if (array[mid] < value)
 begin = mid + 1;
 else if (array[mid] > value)
 end = mid - 1;
 else
 return mid;
 }
 return -1;
}

答:每一次查找的时候都缩小一半的空间,从1/2到1/4,最后的最后找到那一个,所以(1/2)^N=1,N=log2​N,所以就是O(log2​N),时间复杂度中,对数的底数可以忽略,所以可以简写为 O(logN)

三:普通递归

*公式:递归的时间复杂度=递归的次数*每次递归里面的次数

long factorial(int N) {
 return N < 2 ? N : factorial(N-1) * N;
}

答:我们可以通过画图来解决问题

我们假设N=3来理解就行,所以递归的次数就是N-1,每次递归里面的执行次数是1,所以为O(N)

四:斐波那契暴力递归

int fibonacci(int N) {
 return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

答:所以每次个数都是2^(N-1)个递归,所以通过等比公式加起来就是2^N-1,就是O(2^N)

空间的复杂度

空间复杂度是对⼀个算法在运⾏过程中临时占⽤存储空间⼤⼩的量度。空间复杂度不是程序占⽤了多 少bytes的空间,因为这个也没太⼤意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基 本跟时间复杂度类似,也使⽤⼤O渐进表⽰法。

*空间复杂度计算的核心是:统计算法在运行过程中,除了输入数据(参数数组)之外,额外申请的内存空间大小。

例一:冒泡排序

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;
 }
 }
}

答:全程没有额外创建空间,变量就固定end,sorted和i,所以为O(1)

例二:斐波那契数列

int[] fibonacci(int n) {
 long[] fibArray = new long[n + 1];
 fibArray[0] = 0;
 fibArray[1] = 1;
for (int i = 2; i <= n ; i++) {
 fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
 }
 return fibArray;
}

答:主要的大头是long[] fibArray = new long[n + 1];因为for循环里没有创建新的,所以额外数量是N-1所以为O(N)

例三:

long factorial(int N) {
 return N < 2 ? N : factorial(N-1)*N;
}

答:实例3递归调⽤了N次,开辟了N个栈帧,每个栈帧使⽤了常数个空间。空间复杂度为O(N)

三:包装类和泛型

(1)包装类

在Java中,由于基本类型不是继承⾃Object,为了在泛型代码中可以⽀持基本类型,Java给每个基本 类型都对应了⼀个包装类型,也就相当于包装类型范围更广一点

1. 装箱 (Boxing)

定义:将基本数据类型转换为对应的包装类对象。并且分为自动装箱和手动

第一种就是手动调用方法来进行装箱,称为手动装箱,第二种则是系统识别帮你调用了这个方法来实现装箱,称为自动装箱

2. 拆箱 (Unboxing)

定义:将包装类对象转换为对应的基本数据类型。并且也分为自动装箱和手动

1就是自动,2就是手动

泛型

理解:通俗讲,泛型:就是适⽤于许多许多类型。从代码上讲,就是对类 型实现了参数化。用于可以运用多种类型的数据

引出:在数组中,只能输入特定类型的数据,然后所有类都是Object的子类,那数组也可以写成Object类型的,并且通过一种写法就可以决定数组存放数据的类型,就得用到一个特别的符号<>,示例如下

public class Array <T> {
    public Object[] array = new Object[10];

    public T getPos(int pos) {
        return (T) this.array[pos];
    }

    public void setVal(int pos, T val) {
        this.array[pos] = val;
    }
}
public class Test{
    public static void main(String[] args) {
     Array <Integer>array=new Array<>();
     array.setVal(0,100);
     array.setVal(1,200);
        System.out.println(array.getPos(0));
    }

图一将数组写成Object类型,通过set来放数据,get来拿数据,<>是代表要替换类型,T是常用的一个字母,可以自己换,图二测试类里面Array里面放了要放的类型,然后通过set和get方法来实现

在 Ubuntu 22.04 上配置 SonarQube 与 CI/CD 流水线实现自动化代码审查 本文详细介绍了在Ubuntu 22.04系统上配置SonarQube并与CI/CD流水线集成的完整流程,实现自动化代码审查。从环境准备、数据库配置到核心参数调优,再到与Jenkins和GitHub Actions的深度集成,提供了实战技巧和性能优化建议,帮助团队提升代码质量监控效率。 阅读详情

相关推荐

WPS Office 2026免费安装指南:AI办公与安全使用全解析

办公软件作为数字化办公的核心工具,其基本原理是通过文档处理、数据计算和演示展示等功能模块满足用户日常办公需求。随着人工智能技术的发展,现代办公软件逐步集成AI能力,通过自然语言处理和数据分析算法提升工作效率。在技术价值层面,优秀的办公软件不仅需要保持格式兼容性和跨平台同步能力,更要注重用户数据安全防护。从应用场景来看,无论是个人文档编辑、企业报表分析还是团队协作演示,办公软件都发挥着关键作用。WPS Office 2026作为国产办公软件代表,深度融合AI助手功能,支持智能写作和数据分析,同时通过官方免费策

weixin_30599769的博客 734

leetcode 全 O(1) 的数据结构 java

题干 实现一个数据结构支持以下操作: Inc(key) - 插入一个新的值为 1 的 key。或者使一个存在的 key 增加一,保证 key 不为空字符串。 Dec(key) - 如果这个 key 的值是 1,那么把他从数据结构中移除掉。否者使一个存在的 key 值减一。如果这个 key 不存在,这个函数不做任何事情。key 保证不为空字符串。 GetMaxKey() - 返回 key 中值最大的...

qq_43491066的博客 523

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

zeng699304的博客 2万+

数据结构Java--1

数据结构是一门单独的学科,并不区分语言。本博客以Java为例子,我会尽可能的用简单易懂的语言来总结和解释我所学习的内容。另外在这里给喜欢阅读的小伙伴推荐一本书,程杰老师的《大话数据结构》这本书通篇都是白话,阅读难度不大,适合刚接触数据结构的小白。本系列博客都将在JDK1.8 和 Intellij IDEA 的环境下进行演示和运行。

cur1es的博客 1067

【COMSOL】将一个面上数据导出CSV或txt格式的方法

在COMSOL中参数化扫描后,把一个面上或体里的数据按照CSV或TXT格式导出的方法。

dave496206的博客 2992

手写Socket Web服务器:深入HTTP协议底层原理

HTTP协议是Web通信的基石,其本质是一套严格定义的文本格式与状态交互规范。理解它需回归传输层——TCP连接建立、请求响应格式(如状态行、头/体分隔符\r\n\r\n)、字符编码与字节长度一致性等核心原理。这些知识直接决定CORS拦截、中文乱码、Content-Length错误等高频问题的排查效率。在现代框架封装日益厚重的今天,亲手用Socket实现一个可被Chrome识别的极简Web服务器,成为掌握Web运行机制最有效的实践路径。本文即以DebugLZQ经典案例为蓝本,还原从URI解析、DNS查询、So

weixin_40192258的博客 534

Java 数据结构指南:从 0 到 1

Java 提供了强大的集合框架(Java Collection Framework, JCF),主要包含List、Set、Queue 和 Map四大核心接口。

qq_56323274的博客 563

NeuralKG的安装及简单demo使用(浙江大学开源知识图谱表示学习工具)

记录NeuralKG的安装和使用,以及解决windows系统下的运行demo.py出现的问题。

m0_46621271的博客 1399

java数据结构_1

1.多画图2.多思考3.多写代码Java集合框架(Java Collection Framework),又被称为容器(container),是定义在java.util包下的一组接口interfaces和其实现类classes。将多个元素放在一个单元中,对这些元素进行快速,便捷的存储,检索,管理,即增删改查CRUD。下图是类和接口的一个总览图,这里先放在此处留哥眼熟,后续会慢慢了解。

Zz_waiting的博客 921

Android HCE实战:手把手教你用Kotlin实现NFC公交卡模拟(含完整APDU指令解析)

本文是一份Android HCE实战指南,详细讲解如何使用Kotlin实现NFC公交卡模拟。内容涵盖HCE服务搭建、APDU指令(如SELECT AID、GET PROCESSING OPTIONS)的完整解析与响应逻辑,并提供读卡器端测试代码,帮助开发者深入理解基于主机的卡模拟技术。

qsc901234567的博客 1118

YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线

本项目实现了一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,具有以下核心特点: 技术架构:采用TensorRT 8.6+进行GPU加速推理,结合CUDA 12.1和OpenCV 4.8+,实现高效计算机视觉处理。系统使用XMake替代CMake构建,配置更简洁高效。

hscing的博客 1066

《数据结构》实验1.1 java 中的运用

我不知道数据在java中是怎么体现的, 也不知道java怎么体现类模板,

lovecoolyao的专栏 628

第81篇:Vibe Coding时代:LangGraph + Eval评估体系实战,解决 Agent 优化全靠感觉的问题

本文介绍了一个为LangGraph Coding Agent设计的评估体系解决方案。文章首先指出了当前AI Coding Agent开发中的常见问题:优化过程缺乏客观评估标准,导致改进效果难以量化。随后提出了一个完整的评估框架,包括评估指标(任务成功率、质量指标、安全指标、成本指标和流程指标)、项目结构设计和评估案例集。 核心内容包括: 设计了JSON格式的评估案例集,覆盖正常任务、边界任务和高风险场景 实现了模拟Agent输出的演示代码 构建了多维度评分系统,包括关键词匹配、禁用词检测和成本评估 提供了评

sundong_81的博客 48

Java数据结构速成【1】

本文系统介绍了Java中常见的数据结构及其应用场景。主要内容包括:数组(Array)和动态数组(ArrayList)的基本操作和内存特性;链表(LinkedList)的单双向实现及增删改查方法;哈希表(HashMap)的键值对存储机制;栈(Stack/Deque)和队列(Queue)的LIFO/FIFO特性实现;二叉树的结构定义和遍历方式(DFS/BFS)。文章还详细对比了Collection接口及其子接口(List、Set、Queue、Deque)的方法差异,并分析了ArrayDeque作为双端队列同时支

Zssss12的博客 1047

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java数据结构-collection,map (1)

数据结构关系

ceshiyuan001的博客 259

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【数据结构】第1天之Java中的数据结构

百度百科解释维基百科解释。

工一木子 609

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java数据结构1——基础

记在本子上的笔记抄过来,写的比较简单,八成是不会补充了,剩下两成应该是跟对象吵架了所以来写写这个

Marrrrrrno_o 263

了解Java 数据结构【1】

Java 提供了丰富的数据结构来处理和组织数据。Java 的 java.util 包中提供了许多这些数据结构的实现,可以根据需要选择合适的类。

2501_94294320的博客 948

Java-数据结构(一)-java1中有哪些数据结构呢?

在Java中,数据结构是指在程序中用来组织和存储数据的方式。Java提供了丰富的数据结构,可以根据不同的需求选择合适的数据结构来操作和处理数据。本文将介绍在Java1版本工具包中的主要数据结构,包括枚举、位集合、向量、栈、字典、哈希表、属性。枚举是一种特殊的数据类型,用于定义一组命名常量。位集合是用来存储位的数据结构。向量是一种动态数组,其长度可以根据需要增长或缩小。栈是一种后进先出(LIFO)的数据结构,只允许在一端(栈顶)进行插入和删除操作。字典是一种键值对的数据结构,也可以理解为映射(Map)。

向诸位大佬虚心学习 5232

Java数据结构:1. 数据结构前置知识

Java 集合框架 (Java Collection Framework) ,又被称为容器 container ,是定义在java.util包下的一组接口 interfaces和其实现类 classes。

T2283380276的博客 1072

Java数据结构篇四:JDK1.7和JDK1.8的HashMap区别

JDK1.7和JDK1.8的HashMap区别 JDK7: HashMap底层是数组加链表的形式 数组的默认长度为16,加载因子为0.75,也就是16*0.75=12(阈值) 当计算出元素的位置在数组中冲突时,那么会以链表的形式存储新的元素,新的元素插在链表的头部,然后将链表下移,也就是将数组中的值赋值给新来的元素, 当数组中12个位置被占据时(也就是达到了阈值),同时新插入的元素的插入位置不为...

Mr_lisj的博客 542

Java数据结构——1.准备知识

比特就业课Java数据结构——准备知识 课后思维总结

要努力去发光,而不是被照亮~ 9178

Java数据结构与算法1

算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算数据结构和算法的关系程序 = 数据结构 + 算法数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。数据结构和算法学习大纲数据结构可以简单的理解为数据与数据之间所存在的一些关系,数据的结构分为数据的存储结构和数据的逻辑结构。

dulalalanunu的博客 177

1、Java的json得到我们想要的数据结构

我们数据结构最开始为什么结构,那么我们这个方法就要定义为什么结构(两种结构,要么数组[ ](可以是普通数组,也可以是对象数组),或者对象{ })我们里面还有个对象的属性里一个Interger的数组。不要忘记我们这个将这个对象数组的对象用add加进去。我们就去给这个里面的对象的各个属性赋值了(name很简单,直接先new出Servies)后面就是一个对象的属性的对象数组了(这里的数组里只有一个对象而已)所以里面是数组对象。首先最外面是一个{ }所以一个对象。最后我们返回这个对象(我们最开始为一个对象嘛)

分享JAVA/ Python/ Ts学习路上的一些笔记,不足之处多多见谅。 815

LeetCode(432):全 O(1) 的数据结构 All O`one Data Structure(Java)

2020.2.22 LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 这道题要求在常数的复杂度内对这个数据结构进行查找、增删、获取最值操作。而且相同count值还可能会同时存在多个key,因此需要结合多种数据结构进行。 依靠一个HashMap、一个排序双向链表DoubleLinkedList,...

NJU_ChopinXBP的博客 574

【数据结构 1】顺序表及其Java实现

顺序表一、什么是数据结构?二、线性数据结构三、顺序表及其Java实现3.1 什么是顺序表?3.2 顺序表的实现(固定容量版)3.2.1 API设计3.2.2 代码3.3 顺序表的实现(容量可变版)3.3.1 容量伸缩方案3.3.2 代码3.4 顺序表的时间复杂度3.5 补充 一、什么是数据结构? 数据结构是为实现对计算机数据有效使用的各种数据组织形式,服务于各类计算机操作。 不同的数据结构具有各自对应的适用场景,旨在降低各种算法计算的时间与空间复杂度,达到最佳的任务执行效率。 如下图所示,常见的

Java技术工坊 650
上一篇: Java项目里常见的模式
下一篇: Java数据结构2
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值