数据结构:
1.存储数据(将多个数据存储在同一个数据结构对象中)
2.用不同的方式存储数据(为了更加方便的操作数据(数据的增删查改)
数组的结构特点:
数组是内存的一块连续空间
数组可以通过下标进行访问操作数据
下标: 从
0
开始
(
将数组中的第一个位置的内存地址转为标号
0)
,依次向后递增
1
长度: 整个数组中可以存储的元素个数
一维数组: 数组中存储的元素都是数据元素
定义格式: 数组存储的数据类型
[]
数组名
= new
数据
类型
[
存储的元素个数
];
二维数组: 是一个一维数组中存储了多个一维数组
定义格式: 数组存储的数据类型
[][]
数组名
= new
数据类型
[
存储的一维数组个数
][
每个
一维数组中存储的元素个数
];
动态数组:
1: 数组定义好之后长度固定 ,不具备扩容的条件
2: 我们可以自己定义一个动态数组类实现自动扩容
动态数组类:
属性:
底层存储数据的数组
已存入的元素个数
数组的实时长度
方法:
构造方法: 进行初始化
add
remove
get
set
动态数组的实现:
![](https://i-blog.csdnimg.cn/blog_migrate/da9e87d7a450731e41ba714af851e95a.png)
先创建一个MyArray类。最后创建一个不可更改的的常量
![](https://i-blog.csdnimg.cn/blog_migrate/dbdd31592bee70eefebdc28ef6012e00.png)
通过构造方法去设置length的长度,并根据length初始化数组
![](https://i-blog.csdnimg.cn/blog_migrate/601f310d3d85d3443ed30b19c4335421.png)
通过此方法,在主函数里传入一个参数,来判断传入的长度是否符合要求
![](https://i-blog.csdnimg.cn/blog_migrate/fc6e0b77d2ce486bb93ff9d7c72de8af.png)
这是动态数组添加元素的方法,如果元素个数和数组一样长了,此时就需要扩容,来满足我们的要求,我们就需要定义一个newLength变量,通过newLength变量去创建一个新的,容量更大的数组
然后将原数组中的所有变量传入到新数组中,然后将新数组的对象变量名中存储的新数组的内存地址赋值给旧数组名,最后再更新一下数组的长度,这样,我们数组的扩容就完成了。
![](https://i-blog.csdnimg.cn/blog_migrate/ca3c736a8c319ef7e51c535c0d2b2a01.png)
先要判断传入的下标是否在合法的区间,即数组够长传入的下标才有意义,因为需要返回值,所以无论是否在区间内,都需要返回一个值,如果不在区间,返回一个null,在区间,将那个值赋值给e,再返回e的值,即可得到该数组元素。
![](https://i-blog.csdnimg.cn/blog_migrate/230d0b49dd5e117043272bd55a57c840.png)
移除元素的方法,还是先判断是否在合法的区间内,再将当前元素赋值给oldE,因为删除后,当前元素会为空,所以所以要把所有的元素向前覆盖,即通过一个for循环,因为values[size]没有元素,所以for循环中的最大值应该为size-1,因为移除元素后,数组的长度减少了,所以size--,长度减一,即为目前数组的长度。
![](https://i-blog.csdnimg.cn/blog_migrate/817b97baf1e13047b555cfd87baa7d6b.png)
简单的功能性方法,将数组中所有元素打印出来,将str中的内容逐渐增加,最后返回str,即可将数组中所有元素打印出来