【字幕】恋上数据结构与算法之015动态数组03简单接口的实现
我们先来看一下,不要着急啊大家不要着急,这些东西我肯定会一点一点会给大家去实现,最终实现到跟Java官方版本差不多,只要我们自己实现了,偶尔类似的,你会发现你倒回去看Java官方的那个源码,你会发现特别简单,跟我们写的几乎是一模一样啊。
然后我们看一下啊,那这个东西怎么去设计呢?首先一个动态数组的话,它里面应该有哪些成员变量呢?哪些成员变量呢?我们来看一下怎么去设计。我认为动态数组我们这个呃类似的应该至少包含两个成员变量,一个是size,一个是size,那成员变量肯定是弄成私有的size,这个是元素的数量,还有一个什么呢?
还有一个是用了存放元素,我叫做艾利曼斯,那既然我是数组,所以我这个艾利曼斯肯定是指向数组,比如说我申请了一段连续的存储空间,能够存放123456对吧?
这6个元素假设一开始能存放6个元素,所以我这个OMS应该会指向这个速度,那将来我们通过什么呢?我们通过这个爱的添加元素,我们就会把这个元素放到这个位置,放到这个位置一个一个往后面讲,万一空间不够怎么办呢?没关系,因为我们这个叫动态数组,将来肯定会对它进行扩容,那怎么扩容?
这个是后面的事情,我们先保证能存放元素先啊,所以我们这里面应该是有一个东西叫做应酬,还有你们然后这个类型是个速度,对吧?是个速度,所有的元素我们所有的元素都放这个地方,对吧?
那接下来呢我们再提供一个构造函数 or list,好,这个是一个构造函数,那构造函数这样子你想想我刚刚说了,一开始你看我们能存放6个元素,但是很多时候别人可能自己来指定一开始能放多少个元素,那这个事怎么办呢?
所以我觉得可以让别人传一个卡帕斯提进来,卡帕斯提就是容量,你希望你这个速度一开始容量是多少?
那这个时候我们完全该怎么样呢?首先我们的艾利曼斯,那比如说别人船的容量是10,就意味着一开始我们要开辟10个容量给他,对不对?还有一个那别人也可能不传这个容量,所以我提供一个无参的构造函数出来,那无参的构造函数但是又是多少呢?这样子假设我默认是10个,默认是存放10个,这样就解决了,对吧?
当然size默认一开始肯定是等于什么?0的,因为你里面没有存放任何东西,所以元素数量肯定是0,那这里写的不是很严谨,那怎么做呢?这样子像这个10我不建议写在这个地方,我建议写成常量,在Java里面,如果你是弄一个私有的常量,应该是privy study Guide,final games来个before,而且Java的这个编程规范里面,如果是常量,给我写成大写啪啪CT10就可以了。
Final是常量的意思,相当于别的编程语言语言里面的cost,speak是静态的意思啊,静态就静态能保证什么?静态能保证这个家伙的内存永远只有一份,这个在c加加课程里面也讲过这个静态的作用啊。
然后我们看一下这里面应该写什么呢?这个应该写这个然后这这里面呢这里面其实大家思考一下,我们这个代码是不是呃可以啊,我们这个代码的话是不是完全可以这样写?
直接diss,然后传一个capacity,相当于就是我这个无参的构造函数去调用这个有参的构造函数,注意构造函数之间相互调用是通过disc相当于将这个地方开发视频传给他了,他调用这边啊这个我不多说,这是Java语法问题,那这里写的还不是很严谨,为什么?
一边传的这个东西可能是0,可能是-10是吧?也可能是这个负很多很多很多对吧?那这个不严谨那怎么办呢?那这个时候我们做一个判断,f开发视频小于这样子,我们直接这么做吧。只要它传到这个空间,只要它传到这个空间,是小于我这个默认的,我都认为是是什么意思呢?就是它传的太小了,直接用我这个如果他比我这个大传的是11 12,甚至是20,那才用他的。
我就这样做,这样呢就代表太小的东西,太小这个数量我就不接受,我用我这个10,因为你想想如果他传的是一你一开始就按照他的做法去弄一的话,对吧?那这个很快就不够用了嘛,很快就要扩容了,那这样就比较麻烦,所以我的做法就是呃我就给他默认就是10好吧,如果你乐意的话,你也可以用他的对吧?
比如说你传的是小于0,我就给你个1,一开始从一开始那也可以随便你啊,看你怎么去设计,只不过我这里设计就弄成,只要你什么呢,只要你是小于我这个我就弄成10,这是我自己的一个设计噢这里没有说标准的写法,这个是根据你的情况而定,你想怎么写就怎么写,但是一定要做的是什么?
一定要做的是对它进行一个判断啊,如果它是小数,如果是它是个负数,如果是0你要怎么处理?一定要写一个判断,判断之后怎么处理,这个是你自己的事情啊,就这样写。
好,同学们你想想,那我们回到外面,那别new a list是不是意味着就会调用这个,然后把这个10把这个10传到这个地方,所以到时候这里写的就是10,相当于就是它另一个are list,默认就是有10个元素的存储空间,所以它的这个ed至少能加10次对不对?
等我们快速把这个代码写一下吧,那我们来看一下这个这个先看这个赛字,那size很简单,其实就返回我们成员变量size,就是他调用我这个size,调用我这个size这个方法我就返回我这个成员变量对吧?因为这个成员变量就是用来干嘛?用来存放,用来保存我们当前元素的数量的,然后这个时候再往下走,is empty。
Empty什么意思啊?判断一下是否为空,那这个其实很简单,size等于0,其实就是空这样写。
其实很多有同学有同学可能看不懂这一句啊,我我觉得真有可能啊。其实这一句等价是什么呢?这其实就是等价于如果size等于0不是疼处,对吧?如果size是空,那就代表size,size如果等于0那代表确实是空嘛。如果size不等于0,我就返回force代表不空对吧?Size的不为零说明有东西嘛。
其实这个没必要这么写,这样写比较好嘛,那我们再看一下contents,我们先不写,然后我们先想这个这个其实怎么做的,这个其实怎么做,其实是不是就是去这里面查找元素啊,其实是不是就是去我们这里面l0s里面查找元素,所以这里其实非常简单,直接是l miss,然后 address这样不就可以了吧。
但是这里面我们得对这个address做一个什么呢?应该是做一个约束是吧?应该是得做一个约束,我们得进行判断。
比如说index如果是小于0或者index你也不能说超过是吧?但不能超过什么呢?超过我这个size,比如说我现在存放了三个元素,那我的size就是三,那你能访问的下标其实就是0一,所以这个如果你大于等于这个size,比如说你有三个,那你这个索引等于3就不行,因为你索引只能是012啊,所以小于0或大于等于。
那这怎么处理呢?这个怎么处理呢?这看你想怎么处理,比如说你不想做任何处理,比如说他传错了,你也不想报错,那行吧,你直接返回一个返回一个0给他嘛,因为你传错了,你传错了我就给你0,这是一种处理方法。
在Java里面比较多的处理方法是直接抛出一个异常,叫做死肉牛,而且像这种呃数组越界的异常,它已经内置了一个东西叫做index out of boss,etc etc就是异常,抛出一个异常,那这个异常信息它是传一个字符串,那这里你就可以写你的信息,比如说一旦别人传错了,你就抛出一个错误,告诉他你为什么错了对吧?
比如说我们这里就可以降嗯为什么错呢?因为你index是这个对吧?但是我们的size是多少呢?我们的size是好,这个是在干什么?这个是在拼接字母之外,将这个字符串跟这个整数还跟这个字符串还跟这个整数拼起来,这个是Java里面的拼接字符串,非常简单啊,就这样写。
就抛出这个异常信息,那我们看一下那这个东西是否有效呢?我们来试一下。
Best点get,比如说我传一个-10,-10-10肯定有问题,对吧?我们调用get-10的话,他肯定会小于0小于0就会抛出异常,我们看一下抛出异常是什么反应啊?我们右击我们可以发现这里出现了红色,这个就是我刚刚抛出的异常,这个就是我刚刚写的提示信息,你看你的size是0,你传个-10那肯定不合理吧对吧?这肯定是不合理。
然后既然你塞子是0,说明里面什么也没有,什么也没有,其实你传什么都不对,传0也不对,因为只有你至少有一个元素的时候你才能传0,所以传0其实也是不对的,我们来右击,你看塞子是0,你怎么可以传0呢?也不对。
这个就是抛异常,大家思考一下,如果我不抛异常那也行,是不是可以直接return0告诉你,就是不做任何处理,我就不去访问他了,因为因为因为你你传错了嘛,我就不做后面的事情了,但这种可能提示不是很友善,那Java里比较友善的提示方式其实就是抛异常,就是通过错误来提醒他你错了啊就这个意思。
而且这种抛异常有个好处,你发现了吗?这里面有个而类似的7171,那这个时候我一点你看就定位到这个地方,那就知道噢你哪里错了。嗯嗯嗯。
所以你在写一个框架的时候,你在封装一个框架的时候,比如说我们现在就在封装一个动态速度对吧?呃错误的地方的话,你可真的是可以考虑采取这个抛异常的这个形式,那别人在用你的框架用错了,他就可以通过这个定位异常的这个方式定位到他哪里错了,那这样解决解决问题就比较方便啊,而且我们有一些比较友善的提示信息,这个是干好。
再看一下赛,那在这个其实也很简单,设置index这个位置的这个元素,大家想想这个怎么设置啊,比如说他传一个一给我,我是不是就是把一这个位置的元素给换掉就可以了,而且我这个语义是什么?我这个会返回一个,它原来是什么,相当于就是你传新的给我,我会先把这个位置对应的原来元素给你,同样的它传的这个index是必须跟get这个影带是一样的范围,所以我们把这个东西拿过来,把这东西先拿过来。
然后这里面怎么写,这里面首先old先取出来l miss index。我们先取出来,然后这个o的放这里,然后这个l里面是然后应该是什么?看你们对吧?所以代码逻辑其实非常简单,就这样写就可以了,对吧?把原来的取出来,然后用新的元素覆盖掉这个位置,然后返回原来的元素非常非常的这个简单。
然后的话我们再往下看,添加的话我们可能要下一个再讲啊,因为本来今天我们就讲复杂度的啊,这个先搁着,因为添加东西比较多,然后我们再看一下呃什么删除删除也不行,这个我们得得得下次,那这个呢这个什么意思?这个是看一下这个元素在我们数字中的位置。那这个怎么做很简单,其实就是什么呢?其实就是便利,怎么便利呢?
从这个位置开始便利,看一下看一下这个位置是不是那个元素,再看一下下一个位置,再看下一个位置,一旦发现这个位置是那个元素就返回这个位置,所以我们这里其实非常简单,这里非常简单,然后这里怎么做呢?这里的话由于我们是整数,整数的比较直接用等号就行了,这里不应该是这个,这里应该是直接是size就好了,对吧?比如说我们有5个元素,那我们就遍历5次遍历5次,然后这里边这里怎么写的,这里很简单,I如果等于兄弟们我们就直接返回,唉按照我的编程习惯,一般来说判断完直接返回的,我就会省略掉大括号,这是我个人的一个编程习惯。
好,这样就可以了,大家想想是不是只要找到相等的就直接返回这个索引就好了。好,如果找不到怎么办?找不到一般来说我们返回-1,返回-1对吧,像-1这个东西呢我建议大家也是一样写成常量,在拿货之前在这个位置写LV版,not found,然后这里面应该直接写一个-1对不对?这里面not found,那这个是往下走,然后这个时候翻过来。
好的杨总,好,这个我们写完,然后添加删除都放到下一节课,然后这个set我们写完了,然后这个get我们写完了,然后这个添加放的要content是否包含这个元素,那简单了,这个时候我们可以直接调用我们刚刚写的,如果不等于l里面那放着大家想一想是不是代表代表包含了对吧?
因为如果检查出来这个这个元素的这个索引,检查出来这个元素的这个索引是等于-1代表不存在,如果不等于这个-1代表就存在,代表就包含说content是代表包包不包含的意思。
好,那这几个最基础的东西我们其实已经写完了
相关文章:

【字幕】恋上数据结构与算法之015动态数组03简单接口的实现
我们先来看一下,不要着急啊大家不要着急,这些东西我肯定会一点一点会给大家去实现,最终实现到跟Java官方版本差不多,只要我们自己实现了,偶尔类似的,你会发现你倒回去看Java官方的那个源码,你会…...

基于2023年网络赛赛题了解OpenCv
一、OpenCv图像读取与显示 1.图像的读取与显示 cv.imread() 图像读取,第一个参数是照片的位置一般是完整路径,第二个参数是指定图片输出的样式 cv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。(默认模式)。cv.I…...

你到底更适合买虚拟主机还是服务器?
前言 在当今数字化的时代,选择合适的网络服务平台对于个人和企业来说至关重要。无论是搭建个人博客、运营企业网站还是开发游戏,服务器的选择都会直接影响到项目的成本、性能以及用户体验。那么,你到底适合虚拟主机还是服务器呢?…...

linux手册翻译 addr2line
名称 addr2line 将地址转换为文件名和代码行数 简介 addr2line [-a|--addresses][-b bfdname|--targetbfdname][-C|--demangle[style]][-r|--no-recurse-limit][-R|--recurse-limit][-e filename|--exefilename][-f|--functions] [-s|--basename][-i|--inlines][-p|--pretty-…...

python-素数中的等差数列
题目描述 质数是在数论中很有意思的数,有很多题都可以围绕它来出,就如你眼前所见的这道题。 给定一个闭区间 [a,b] ,将此范围内的所有素数进行从小到大排序,对于连续的素数,我们可以发现很多等差数列(元素个数大于等于 3 )&#x…...

Unity3D 服务器AStar寻路客户端位置同步显示验证详解
在游戏开发中,经常需要在服务器和客户端之间同步玩家的位置信息,以便其他玩家可以看到他们的移动。本文将详细介绍如何在Unity 3D中使用AStar算法进行路径规划,并在服务器和客户端之间同步玩家的位置信息。 对惹,这里有一个游戏开…...

无人机之悬停精度篇
无人机的悬停精度是指无人机在无GPS信号或其他外部定位辅助下,能够保持在一个固定空间位置时的精度。这一精度受到多种因素的影响,包括但不限于风速、气压、温度、湿度以及无人机自身的姿态稳定性等。以下是对无人机悬停精度的详细分析: 一、…...

力扣题解2848
大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述(简单): 与车相交的点 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] [starti, endi] &…...

电子电气架构---智能汽车应该是怎么样的架构?
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…...

无心剑七绝《中秋相思》
七绝中秋相思 中秋月满意深长 百代江阳老窖香 莫道天涯情不尽 相思寸寸赋华章 2023年9月29日 平水韵七阳平韵 这首诗七绝《中秋相思》由无心剑所作,以其深情的笔触描绘了中秋夜的相思之情。 诗中首句“中秋月满意深长”即以中秋圆月为起点,勾勒出了一幅…...

Python画笔案例-051 绘制赵爽弦图
1、绘制赵爽弦图 通过 python 的turtle 库绘制 赵爽弦图,如下图: 2、实现代码 绘制 赵爽弦图,以下为实现代码: """赵爽弦图.py本程序演录了如何自定义形状,如何把它添加到造型字典。赵爽弦图是用来证明…...

SEGGERS实时系统embOS推出Linux端模拟器
SEGGER 发布了两个新的 embOS 仿真模拟器:embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件,取代物理硬件,为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…...

HTML + CSS - 网页布局之一般布局浮动布局
1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里,然后在周边加上内边距,边框和外边距,是盒子模型 默认一个块级区域会填充父类所有的行向空间,并且沿着块伸长容纳其内容,可以为块状体设置某…...

python定时任务,定时爬取水质和天气
定时爬取水质和天气 代码 代码 from apscheduler.schedulers.background import BackgroundScheduler import requests import datetimeurlweather "http://localhost:8000/CrwalingViewWeather" # 天气接口 urlwater "http://localhost:8000/CrwalingViewW…...

ARM驱动学习之基础小知识
ARM驱动学习之基础小知识 • sch原理图工程师工作内容 – 方案 – 元器件选型 – 采购(能不能买到,价格) – 原理图(涉及到稳定性) • layout画板工程师 – layout(封装、布局,布线,…...

【字幕】恋上数据结构与算法之019动态数组07打印数组
是吧?什么意思呢?你看啊我们刚刚已经加了三个东西了,我现在希望能够打印一下这个速度,希望能把它里面所有元素打出来,那我们试一下,看它默认是怎么打,这个时候我们右击你会发现它打出来长这样子…...

Python基础语法(3)下
列表和元组 列表是什么,元组是什么 编程中,经常需要使用变量,来保存/表示数据。变量就是内存空间,用来表示或者存储数据。 如果代码中需要表示的数据个数比较少,我们直接创建多个变量即可。 num1 10 num2 20 num3…...

数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
时间序列概况在日常生活和专业研究中都很常见。简而言之,时间序列概况是一系列连续的数据点 y(0), y(1), …, y(t) ,其中时间 t 的点依赖于时间 t-1 的前一个点(或更早的时间点)。 在许多应用中,研究者致力于预测时间序列概况的未来行为。存在各种建模方法。这些模型通常基于过…...

XML_Tomcat_HTTP
第四章 XML_Tomcat10_HTTP 一 XML XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。 可扩展 三个字表面上的意思是XML允许自定义格式。但这不代…...

GPT Prompt
Reference https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-apihttps://platform.openai.com/docs/guides/prompt-engineeringbilibili 8分钟系统学习提示工程,别再说大模型还不够聪明!Prompt Engineering,提示词,Few…...

go基础知识归纳总结
无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步…...

【字幕】恋上数据结构与算法之014动态数组02接口设计
申请表数组英文单词叫away,而这个数组是怎么样的申请表?数组是一种顺序存储的申请表,什么叫顺序存储?就是数组里面的所有元素,它的内存地址是连续的,大家的内存是连续的,比如说举个例子…...

ffmpeg硬件解码一般流程
流程 根据硬件名称,查询是否是支持的类型 const char *device_name "qsv"; //cuda enum AVHWDeviceType type av_hwdevice_find_type_by_name(device_name); if(type AV_HWDEVICE_TYPE_NONE) {//如果一个硬件类型是不支持的,打印所有支持…...

微信支付开发-程序开发
一、操作流程图 二、后端代码实现 1、题库实现 a、列表、所有、详情、保存、启禁用、导入答题 b、获取奖品信息、保存奖品信息、 class Question extends Base {// 列表public function getList(){$param $this->request->param();$where [];if(!empty($param[title])…...

【数据结构】排序算法系列——堆排序(附源码+图解)
堆排序 堆排序基于一种常见的**[[二叉树]]结构**:堆 我们前面讲到选择排序,它在待排序的n个记录中选择一个最小的记录需要比较n一1次。本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则无法知道它是最小的记录。 …...

Linux——应用层自定义协议与序列化
目录 一应用层 1再谈 "协议" 2序列化与反序列化 3理解read,write,recv,send 4Udp vs Tcp 二网络版本计算器 三手写序列和反序列化 四进程间关系与守护进程 1进程组 1.1什么是进程组 1.2组长进程 2会话 2.1什么是会话 2.2会话下的前后台进程 3作业控…...

CGAL 从DSM到DTM-建筑物区域提取
CGAL 从DSM到DTM-建筑物区域提取 生成的DSM被用作DTM计算的基础,即地面表示为过滤掉非地面点后的另一个TIN。主要是去除一些建筑物和植被非地形点。 建筑物立面及连通区域提取 建筑物立面的特征是三角形面片的高度变化剧烈。 通过遍历每一个三角面片,…...

Python--编码解码报错
报错问题 错误信息 UnicodeDecodeError: gbk codec cant decode byte 0xac in position 2: illegal multibyte sequence 通常出现在尝试使用 GBK 编码解码某些二进制数据时,但数据中包含了无法被 GBK 解码的字符。具体错误提示是解码器在处理某个字节时发现该字节无…...

大屏可视化常用图标效果表达
1-echarts-雷达图 2-echarts-仪表盘 3-echarts-水球图(利用插件,echarts-liquidfill) 4-element UI tree 添加连接线,修改样式或使用插件(element-tree-line) 5-echarts-漏斗图 6-echarts-饼状图嵌套 optio…...

高通Liunx 系统镜像编译
本文将会介绍如何在编译高通Liunx代码, 具体可以在高通 Linux | 高通下查看相关信息。 编译服务器配置 首先,准备一台Ubuntu 22.04版本主机或者服务器 1,编译Yocto 系统,需要如下一些配置 sudo apt update sudo apt install repo gawk wg…...