Bootstrap

Java数据结构--动态数组

一:数组的定义

1.定义

在计算机科学中,数组是由一组元素组成的数据结构,每个元素有至少一个索引或键来标识。

我们要知道,数组内的元素地址是连续的。

说到数组,相信我们大家都很熟悉,平时我们在练习时,最常用的就是静态数组。除了静态数组,Java中还存在一种动态数组,比如集合ArrayList就是动态数组的一种。

其实在很多的时候,静态数组根本不能满足我们编程的实际需要,比如说我需要在程序运行过程中动态的向数组中添加数据,这时我们的静态数组大小是固定的,显然就不能添加数据,要动态添加数据必须要用到动态数组

下面我们就来深入了解一下动态数组

2.动态数组

①什么是动态数组

动态数组是一种可以自动调整大小的数组,大小在初始化时可以设置,而且可以随着向数组中添加或者删除元素从而动态增长或缩小

②动态数组的优点

Ⅰ.支持随机访问:可根据索引来访问数组中的元素,相比与链表来说访问元素更加高效

Ⅱ.动态增长或缩小:可以动态的增加或者缩小

数组的大小,相比与静态数组,空间利用更加合理

③动态数组的缺点

Ⅰ.插入和删除元素的效率低:相比与链表来说,动态数组的插入和删除效率更低

二:增删改查方法的实现

1.动态数组的创立

动态数组也是基于静态数组来实现的,我们可以根据扩容静态数组的大小从而增加动态数组的大小,因此在成员变量中我们包含arr数组,size动态数组大小以及capacity数组容量

85cd722f193b407ea0115cecfeb17306.jpg

2..增删改方法的实现

了解到了动态数组,那么下面我们就对动态数组的一些功能(增删改查)来做一下实现吧

①数组的扩容

在我们实现增删改查之前,先来实现一下数组的扩容

思路:创建一个新的数组,将容量已满的数组拷贝到新数组中,再将新数组代替原来的数组

093a8195c272496dba4eb02f49bfdaf3.jpg

②add 添加元素

思路:若数组已满则进行扩容。我们要将要插入位置之后的元素向后移动一位,再将要插入的元素插入,更新size指针

若要插入的位置位于数组尾部(此时size等于index),那么我们就不用再去移动其他数据了,直接就插入索引位置即可。而对于在其他位置插入这种情况,最后我们移动后,也是要将元素插入索引位置,那么我们就可以将两种情况插入的代码合并出来,从而简化代码

4d1eb98ca7b9436ab5595f8f201cdba1.jpg

③remove 删除元素

思路:将要删除位置后面的元素向前移动,更新size指针

0c8242d2804043c198b3112d48fff611.jpg

④get 获取指定位置元素

思路:直接根据索引返回数组对应位置元素

7d5a17bc2f6b420788ab8b7f99a44209.jpg

⑤set 修改元素

思路:直接对应索引修改

2586dff5bd6c49f990fda340881d3853.jpg

 3.结果显示

各位方法都自己写了一遍没,下面我们带入数据爽一下吧

7158e9b51ce5475dba99a8b5e3df0e59.jpg

 7501daf98f1a4ed3a6296b0266521052.png

在我们平时的练习中,我们对于动态数组的运用大多数就是集合ArrayList的运用

注:若有小伙伴想要刷题巩固知识而不知道如何下手,推荐使用本平台的算法技能树

若有错误,不足之处,望各位指出更正₍˄·͈༝·͈˄*₎◞ ̑̑

 

 

 

 

;