一、排列原理和特点
定义:
一组可以存储相同数据类型的变量和集合。
特点如下:
保存相同的数据类型。
定义数组需要固定长度,不能修改。
数组具有边界检查,越界后会抛出索引越界异常。
数组引用数据类型并存储在堆内存中,但存储在堆栈内存中,使得地址值指向堆内存中的变量。
对象数组和基本数据类型的数组在使用上相同。 区别在于,对象数组保存引用,而基本数据类型的数组保存基本数据类型。
二、动态数组概念
动态数组是指一个数组的长度可以无限扩展,达到了无限的长度。 其本质是创建新数组,根据原始数组扩展长度,丢弃原始数组,并将原始数组中的元素复制到新数组中。
三、如何手动实现动态数组
增加元素:
添加元素时确定数组中是否还有空闲空间。
如果有剩下的空间,就直接添加。
如果没有剩下的空间,请转到步骤4。
根据扩展的长度创建新数组。
将原始数组中的数据复制到新数组中。
删除元素:
数组是线性结构,因此通常需要保证元素的连续性。 如果删除的元素不是数组末尾的元素,则删除的元素之后的元素将按顺序进行,以便在末尾有空的元素。 添加新元素时始终位于末尾,这有助于避免查询时出现空指针异常。
四、具体代码实现如下
公共语音建议(dogdog ) {
//判断数组是否添加了很多元素
if(count=dogs.length ) {
//将原始数组的长度加倍
int newLength=dogs.length * 2;
//拷贝从原始数组创建新数组
dogs=Arrays.copyof(dogs,newLength );
}
//添加数组元素
dogs[count]=dog;
出局;
}
//删除数组元素并根据id值删除
公共语音识别元件(Intid ) {
//获取要删除的对象
for(intI=0; I计数; I ) {
if(dogs[I].getid(==id ) ) ) ) ) )。
//(盖)将该要素后面的要素整体向后移动
for(intj=I; j count; j ) {
dogs[j]=dogs[j 1];
//清空数组的最后一个元素
dogs [计数-1]=null;
计数---;
布雷克;
}
}
}
}
详细代码引用地址
五.动态数组总结
改变了形状解决了数组固定长度带来的问题。
使数组成为存储效率高的结构。
频繁扩展会降低性能并导致垃圾对象数组。
添加、搜索和方便,但不适合插入和删除操作。
在ArrayList、Vector等集合中被普遍使用。