数据结构--数组

一.线性和非线性

线性:除首尾外只有一个唯一的前驱和后继。eg:数组,链表等。

非线性:不是线性的就是非线性。

二.数组是什么?

数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。它是最简单的数据结构之一,大多数现代编程语言都内置数组支持。

三.数组的特性

1.存储类型一致。

数组的存储类型必须一致在面向对象中,存在子类继承父类的情况,若存储的对象都继承于某一个父类,那么也可以判定为类型一致。

2.长度固定。

数组需要的是一个固定的连续的空间。

3.定义数组的方式。

int[] arr={}
int[] arr=new int[length];
int[] arr=new int[]{1,2,3,4,5}

4.通过索引查询数组中的元素

数组的索引从0开始,每个元素都对应着一个索引处的值。并且索引只能是 int 类型,不能为long更不能是其他的类型。所以数组的最大长度就是 int 的最大值。

5.索引的范围

由于数组的索引时从0开始,所以索引的范围就是从0-(length-1)

6.数组中常见的异常

(1)NullPointException 空指针异常:访问的数据不存在。

private int[] a;public void test(){a[1] = 3;    
}

(2)ArrayIndexOutOfBoundsException 索引越界异常:索引不合理。

int[] arr=new int[5];int a=arr[-1];
int b=arr[5];

7.常见的数组

字符串,对象数组,哈希表等。

四.数组的优势

数组存在索引,所以很方便查询,直接通过索引值调用get()返回即可。

五.数组的劣势

数组每一次在数组中间增删数据时,需要注意前后的元素,牵一发则动全身。

所以数组增删数据特别慢。

而且,数组的长度是固定的,不能动态改变。

六.动态数组

指一些拥有自动扩容能力的数组。eg:ArrayList,Vector

1.Vector底层逻辑

底层是一个数组,使用构造器进行对数组长度的初始设置。在无参构造中调用有参构造。

所以在new Vector对象时,就已经创建好了一个长度为10的数组。

add()方法的底层逻辑以及自动扩容:

在自动扩容的方法中,如果触发自动扩容的条件,数组会自动将当前数组的长度作为参数传递过去,Vector的底层会重新new一个长度为之前数组2倍的新数组并将新数组重新赋给原数组来蒙混过关,让使用者以为还是之前那个数组,但是实质上已经不是之前那个数组,而是新数组了。

这种扩容的方式会存在一个缺陷:在每次扩容时,都会留下一个之前的旧数组,在Vector的底层是不会对这个数组进行处理的,而是等内存满了之后才会进行删除。

所以Vector牺牲的是空间,获得更多的存储空间。

2.ArrayList底层逻辑

ArrayList底层同样是数组,但是数组长度的设定和Vector有些不同的方面。

ArrayList的无参构造只是将一个空串赋值给了elementData数组:

所以 ArrayList 在new了对象之后,并不存在数组中有长度的情况,但是,ArrayList 恰恰就是这个小细节与Vector的差距就显现出来了。ArrayList会在第一次 add() 也就是第一次向数组中添加元素时,才会将数组的长度赋值为10。就是说用的时候才创建,这样就比Vector更节省空间一点。

ArrayList的自动扩容和Vector的底层逻辑基本一致,只有一点点不同的地方就是:ArrayList 是1.5倍扩容。

3.Vector和ArrayList的区别

本小节结束,谢谢大家观看学习!!

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

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

相关文章

MySQL技巧之跨服务器数据查询:基础篇-更新语句如何写

MySQL技巧之跨服务器数据查询:基础篇-更新语句如何写 上一篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQL 以及用同样的…

Unity教程(十八)战斗系统 攻击逻辑

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

前端学习八股资料CSS(二)

更多详情:爱米的前端小笔记,更多前端内容,等你来看!这些都是利用下班时间整理的,整理不易,大家多多👍💛➕🤔哦!你们的支持才是我不断更新的动力!找…

云计算研究实训室建设方案

一、引言 随着云计算技术的迅速发展和广泛应用,职业院校面临着培养云计算领域专业人才的迫切需求。本方案旨在构建一个先进的云计算研究实训室,为学生提供一个集理论学习、实践操作、技术研发与创新于一体的综合性学习平台,以促进云计算技术…

通过Python 调整Excel行高、列宽

在Excel中,默认的行高和列宽可能不足以完全显示某些单元格中的内容,特别是当内容较长时。通过调整行高和列宽,可以确保所有数据都能完整显示,避免内容被截断。合理的行高和列宽可以使表格看起来更加整洁和专业,尤其是在…

【代码审计】常见漏洞专项审计-业务逻辑漏洞审计

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 0x01 漏洞介绍 1、 原理 业务逻辑漏洞是一类特殊的安全漏洞,业务逻辑漏洞属于设计漏洞而非实…

Wordpress常用配置,包括看板娘跨域等

一个Wordpress的博客已经搭建完成了,那么为了让它看起来更有人间烟火气一点,有一些常用的初始配置,这里整理一下。 修改页脚 页脚这里默认会显示Powered by Wordpress,还有一个原因是这里要加上备案信息。在主题里找到页脚&…

数据库范式、MySQL 架构、算法与树的深入解析

一、数据库范式 在数据库设计中,范式是一系列规则,用于确保数据的组织和存储具有良好的结构、完整性以及最小化的数据冗余。如果不遵循范式设计,数据可能会以平铺式罗列,仅使用冒号、分号等简单分隔。这种方式存在诸多弊端&#…

Taro React-Native IOS 打包发布

http网络请求不到 配置 fix react-native facebook::flipper::SocketCertificateProvider‘ (aka ‘int‘) is not a function or func_rn运行debug提示flipper-CSDN博客 Xcode 15(iOS17)编译适配报错_no template named function in namespace std-CS…

基于yolov8、yolov5的车型检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要:车型识别在交通管理、智能监控和车辆管理中起着至关重要的作用,不仅能帮助相关部门快速识别车辆类型,还为自动化交通监控提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的车型识别模型,该模型使用了…

从python源码到可自动更新软件

相关阅读 标题链接如何打包python程序为exebczl【auto-py-to-exe 可视化打包python到exe】51CTO ZATA 1. python源码 打包时需要特别注意的源码编写规范 除了基本的 Python 编码规范之外,在准备程序进行打包时,还需要特别注意以下几点: 1.1 依赖管理 确保 requirements.t…

javaWeb小白项目--学生宿舍管理系统

目录 一、检查并关闭占用端口的进程 二、修改 Tomcat 的端口配置 三、重新启动 Tomcat 一、javaw.exe的作用 二、结束javaw.exe任务的影响 三、如何判断是否可以结束 结尾: 这个错误提示表明在本地启动 Tomcat v9.0 服务器时遇到了问题,原因是所需…

k8s笔记——核心概念

什么是K8s Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。 Kubernetes 最初是由 Google 工程师作为 Borg 项目开发和设计的,后于 2015 年捐赠给 云原生计算基金会(CNCF)。 什么是 Kubernetes 集群…

SkyWalking-安装

SkyWalking-简单介绍 是一个开源的分布式追踪系统,用于检测、诊断和优化分布式系统的功能。 支持 ElasticSearch、H2、MySQL、PostgreSql 等数据库 基于 ElasticSearch 的情况 ElasticSearch(ES) 安装 1、下载并解压 https://www.elastic…

怎么样绑定域名到AWS(亚马逊云)服务器

1,拿着你买的域名去亚马逊申请一个证书。申请证书分两种,一种是去亚马逊后台填域名手动申请 ,另一种是通过API来申请,类似如下代码: 2、证验证书。有两种方式:一种是通过邮件,另一种去到域名提供…

C++常用的新特性-->day06

时间间隔duration duration表示一段时间间隔&#xff0c;用来记录时间长度&#xff0c;可以表示几秒、几分钟、几个小时的时间间隔。duration的原型如下 // 定义于头文件 <chrono> template<class Rep,class Period std::ratio<1> > class duration;Rep&…

云服务器端口开放

云服务器一般除了必要端口&#xff0c;其它端口默认都是关闭的&#xff0c;要想进行网络通信就必须开放指定的端口。下面以腾讯云服务器为例来进行详细说明。 腾讯云的轻量服务器是没有安全组的&#xff0c;这里有的只是防火墙&#xff0c;开放端口也是通过防火墙来设置的。首先…

[Linux网络编程]10-http协议,分别使用epoll和libevent两种方式实现B/S服务器

一.HTTP协议&#xff0c;Request请求和Response响应 二.常用状态码 接下来使用两种方式构建B/S模型,实现浏览器向客户端请求文件的功能。 浏览器向构建好的服务器发送请求&#xff0c;在请求行中请求具体文件&#xff0c;服务器连通客户端(浏览器)后&#xff0c;检查文件是否存…

C#从入门到放弃

C#和.NET的区别 C# C#是一个编程语言 .NET .NET是一个在window下创建程序的框架 .NET框架不仅局限于C#,它还可以支持很多语言 .NET包括了2个组件&#xff0c;一个叫CLR(通用语言运行时)&#xff0c;另一个是用来构建程序的类库 CLR 用C写一个程序&#xff0c;在一台8688的机器…

Suricata

02-Suricata 一 ICMP流量预警 一条ICMP报文有四个重要内容&#xff0c;可与相应的ICMP关键字相匹配。它们是&#xff1a;消息的类型、代码、ID和序列。 通过ICMP的type进行匹配 alert icmp any any <> any any (msg:"icmp流量预警";itype:8;threshold:type t…