【数据结构与算法】Java描述:学数据结构与算法你需要预备的知识点!!!

这篇文章主要介绍 什么是数据结构,算法的时间复杂度,空间复杂度计算,包装类的装箱拆箱,

泛型语法,以及擦除机制。

目录

一、什么是数据结构

二、时间复杂度,空间复杂度

2.1 时间复杂度,空间复杂度是什么?

2.1.2 时间复杂度的计算(大O渐进表示法)

2.1.3空间复杂度的计算(大O渐进表示法)

三、包装类

3.1包装类是什么?

3.2 为什么引入包装类

3.3 包装类的装箱与拆箱

3.3.1 面试题(阿里)

四、泛型

4.1 什么是泛型

4.2 泛型的使用

4.3 泛型中的擦除机制

4.4 泛型的上界

4.4.1 泛型类型接入接口 Comparable


一、什么是数据结构

一种描述组织一组数据的方式

其实很好理解,就是把不同种类的数据用不同的结构存储,就是数据结构

但是对数据结构的操作离不开算法,所以我们一般会把数据结构和算法放到一起来学


二、时间复杂度,空间复杂度

2.1 时间复杂度,空间复杂度是什么?

我们在写出一个算法时,不同的方法会有不同的执行速度,不同的程序占用的空间也不同

比如你去算1-100的和,一个一个加和用通项公式的速度肯定不同,在代码中,一般会判断在循环中循环多次,大概判断执行次数。

我们为了评判一个算法或者程序的好坏,就提出了时间复杂度,空间复杂度的概念。


2.1.2 时间复杂度的计算(大O渐进表示法)

一个算法实际的执行时间是求不出来的,所以我们用一种 数学函数 去 算一个程序执行的最差的执行时间 它的计算原则是:

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

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

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

看着有点懵,我们通过实践来理解规则:

再来几个例子

有限次数的程序:


冒泡排序算法:


对数级的时间复杂度:


对于递归算法,我们计算的公式稍微有些不同:

递归的时间复杂度 = 递归的次数*每次递归执行的次数

斐波那契递归算法要具体分析,不能套用公式,它是等比数列求和。


2.1.3空间复杂度的计算(大O渐进表示法)

以前的内存资源比较珍惜,现在技术发展,我们没有那么关注空间复杂度了

空间复杂度的计算主要就看算法中创建了多少个变量,一个就是O(1),N个O(N)。


常见的复杂度:


三、包装类

3.1包装类是什么?

包装类就是 把 基本类型,写成一个类,在里面有操作这个类型的方法,底层还是基本类型

除了Integer 和 Character 其他 基本类型 的包装类都是首字母大写


3.2 为什么引入包装类

引入包装类是为了解决基本数据类型(例如int,char等)不能直接参与面向对象的操作的问题。在面向对象编程中,只能使用对象来进行操作,而基本数据类型不是对象。为了能够在面向对象的环境中使用基本数据类型,Java引入了包装类来将基本数据类型封装成对象。


3.3 包装类的装箱与拆箱

把基本类型 转化 为包装类型 我们叫 装箱,也叫装包

把包装类型 转化 为基本类型 我们叫 拆箱,也叫拆包

有自动和显示两种方法:


装箱:


拆箱:


3.3.1 面试题(阿里)

结果:

是第一个是 true 第二个是 false


原理:

这里使用自动装箱,我们看看装箱的源码

范围在 low 和high 之间的直接拿数组中的值(左闭右开),在这个范围外的返回一个新的对象,所以a b是相同的,而c d 地址不同,返回false


四、泛型

4.1 什么是泛型

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类.

有什么办法可以随意更改类型呢?

泛型是一种特性,在JDK1.5中引入的语法,就是为了解决上面的问题,将类型进行参数化,使用方法或者类时,指定具体的类型参数,这就是泛型。


4.2 泛型的使用

1. 先定义一个万能数组,可以存放各种类型的数据:

2. 我们作为使用者去调用一下试试:


4.3 泛型中的擦除机制

我们也好奇,泛型真神奇,真好用,那我们调用的数组就变成 Integer 类型的了吗

这里就用到了一种叫 擦除机制 的机制,泛型是一种编译时期的机制,在运行时没有;

在上方我们对数组传值,虽然传入的是 Integer 类型的,但在运行时会被 擦除机制 擦除为 Object类型,包括下面我们展示的数组 也被擦除为原来的类型了。


4.4 泛型的上界

泛型的上界是指在使用泛型时限制类型的范围。它可以用来限制必须是泛型类型 必须是某个类的子类 或 实现了 某个接口

public class MyClass<T extends Number> {}

是不是很奇怪,干嘛要这么做???下面为你举个例子

4.4.1 泛型类型接入接口 Comparable

我们之前介绍了,基本类型比较比较简单,但是自定义类型的比较要继承 Comparable 类

 我们写一个泛型类,当中有个方法 可以求数组最大值:

先不定义上界:

这下全明白了,为了规避这种情况,提出了泛型的上界概念

我们修改代码:

这样代码就正常了

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

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

相关文章

传输层7——TCP拥塞控制(重点!!!)

目录 一、认识拥塞控制 1、什么叫做拥塞&#xff1f; 2、拥塞的特点 3、流量控制 VS 拥塞控制 二、TCP如何防止拥塞&#xff1f; 1、慢开始 2、拥塞避免 3、3重复确认 和 快重传算法 4、快恢复算法 5、总结 三、主动队列管理AQM 1、技术背景 2、AQM思 想和实现策略…

[64]最小路径和⭐

[64]最小路径和⭐ 题目描述 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 **说明&#xff1a;**每次只能向下或者向右移动一步。 示例输入 示例 1&#xff1a; 输入&#xff1a;grid …

AI技术架构:从基础设施到应用

人工智能&#xff08;AI&#xff09;的发展&#xff0c;正以前所未有的速度重塑我们的世界。了解AI技术架构&#xff0c;不仅能帮助我们看懂 AI 的底层逻辑&#xff0c;还能掌握其对各行业变革的潜力与方向。 一、基础设施层&#xff1a;AI 技术的坚实地基 基础设施层是 AI 技…

每日计划-1213

1. 完成 SQL2 查询多列 https://www.nowcoder.com/exam/oj?page1tabSQL%E7%AF%87topicId199 2. 八股部分 1) C 中面向对象编程如何实现数据隐藏&#xff1f; 在c中&#xff0c;可以将数据成员声明为私有或受保护&#xff0c;并提供公有的成员函数来访问和修改这些数据成员&am…

【ADS射频电路设计教程】1. ADS基本操作

下面介绍ADS中主要仿真器的使用 1. 直流仿真 直流仿真器在控制面板的simulator-dc 直流仿真器 但是ADS自带有很多仿真器&#xff0c;可以直接来调用 选用晶体管电流扫描的模板 就可以输出模板 然后调入晶体管模型 然后要设置扫描的电压&#xff0c;选择dc仿真器对vds进行扫描…

EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用

随着信息技术的快速发展&#xff0c;安防视频监控系统在公共安全领域的应用变得越来越广泛。传统的视频监控系统多依赖于中心服务器进行视频流的集中处理和分发&#xff0c;这不仅增加了网络带宽的负担&#xff0c;还可能成为系统性能瓶颈。为了解决这些问题&#xff0c;P2P&am…

CTFHub 命令注入-综合练习(学习记录)

综合过滤练习 命令分隔符的绕过姿势 ; %0a %0d & 那我们使用%0a试试&#xff0c;发现ls命令被成功执行 /?ip127.0.0.1%0als 发现一个名为flag_is_here的文件夹和index.php的文件&#xff0c;那么我们还是使用cd命令进入到文件夹下 http://challenge-438c1c1fb670566b.sa…

美团2024年秋招第一场笔试【前端移动端】

美团2024年秋招第一场笔试【前端&移动端】 2024/12/12 1.在一个长度为28的数组中删除第5个元素时&#xff08;元素序号&#xff1a;1~28&#xff09;&#xff0c;需要向前移动&#xff08;23&#xff09;个元素。 2.如下图一个树型结构&#xff0c;其结点E在树的中序遍历…

2025周易算命网站搭建详细方法+源码选择php环境的配置

以下是一个详细的搭建教程&#xff0c;包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux&#xff08;推荐使用Ubuntu或CentOS&#xff09;Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x&#xff08;确保小于8.0&#xff09; 1.2 安…

【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空

项目场景&#xff1a; TCODE:自开发程序ZMMF004 采购申请打印 问题描述 ZMMF004打印的时候&#xff0c;有的采购申请的品名、规格、品牌为空 原因分析&#xff1a; 1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌 SQL语句如下&#xff0c;只需修…

人员离岗监测摄像机智能人员睡岗、逃岗监测 Python 语言结合 OpenCV

在安全生产领域&#xff0c;人员的在岗状态直接关系到生产流程的顺利进行和工作环境的安全稳定。人员离岗监测摄像机的出现&#xff0c;为智能人员睡岗、逃岗监测提供了高效精准的解决方案&#xff0c;而其中的核心技术如AI识别睡岗脱岗以及相关的算法盒子和常见的安全生产AI算…

Linux之条件变量,信号量,生产者消费者模型

Linux之条件变量&#xff0c;信号量&#xff0c;生产消费者模型&#xff0c;日志以及线程池 一.条件变量1.1条件变量的概念1.2条件变量的接口 二.信号量2.1信号量的重新认识2.2信号量的接口 三.生产者消费者模型3.1生产者消费者模型的概念3.2基于阻塞队列的生产者消费者模型3.3…

Leecode刷题C语言之K次乘法运算后的最终数组①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; int* getFinalState(int* nums, int numsSize, int k, int multiplier, int* returnSize) {int *ret (int *)malloc(sizeof(int) * numsSize);memcpy(ret, nums, sizeof(int) * numsSize);while (k…

配置中心 选型 : Apollo Vs. Nacos Vs. spring cloud config

为什么我们需要一个微服务配置中心&#xff1f; 首先&#xff0c;我们可以想象下&#xff0c;如果没有配置中心&#xff0c;我们的项目可能是这样的&#xff1a;不同环境的配置文件都放在项目里面&#xff0c;部署时可以通过启动参数来指定使用哪个环境的配置。 这种方式有两…

LAVE——基于大语言模型的新型代理辅助视频编辑工具允许用户根据自己的编辑风格进行调整

概述 论文地址&#xff1a;https://arxiv.org/abs/2402.10294 视频是一种非常强大的交流和讲述故事的媒介。随着社交媒体和视频共享平台的出现&#xff0c;视频的受欢迎程度直线上升&#xff0c;许多人都在制作和分享自己的内容。然而&#xff0c;对于初学者来说&#xff0c;视…

【Vulkan入门】09-CreateFrameBuffer

目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同&#xff0c;其他文章基本上都使用窗口框架&#xff08;X11、GLFW、WSL等&#xff09;提供的surface来显示Vulkan渲染出的图像。我认为那样会…

题目 1688: 数据结构-字符串插入

第一种方式字符串 #include<iostream> #include<cstring> #include<algorithm> using namespace std; int main(){string s1,s2;int n;cin>>s1>>s2>>n;s1.insert(n-1,s2);cout<<s1<<endl;return 0; } 第二种方式字符数组 …

【KodExplorer】可道云KodExplorer-个人网盘安装使用

说明&#xff1a;安装kodExplorer &#xff08;不是Kodbox&#xff09;&#xff1b;Kodbox需求服务器至少2核4G内存&#xff0c;要求环境具备php/redis/mysql/。安装kodExplorer 就是比较方便简单部署&#xff0c;个人版免费。 一、安装环境需求 服务器: Windows&#xff0c;…

在服务器(linux系统)安装anaconda

按照官方教程操作即可 1.下载anaconda3&#xff0c;选择对应版本 curl -O https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh2.安装anaconda bash ~/Anaconda3-2024.06-1-Linux-x86_64.sh一直按“enter”键查看协议&#xff0c;然后选择“yes”即可。…

使用 WebRtcStreamer 实现实时视频流播放

WebRtcStreamer 是一个基于 WebRTC 协议的轻量级开源工具&#xff0c;可以在浏览器中直接播放 RTSP 视频流。它利用 WebRTC 的强大功能&#xff0c;提供低延迟的视频流播放体验&#xff0c;非常适合实时监控和其他视频流应用场景。 本文将介绍如何在Vue.js项目中使用 WebRtcSt…