在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识。
其代码如下:
public class DynamicArray {
@Test
public void test() {
//在最后位置插入元素
addLastElement(1);
addLastElement(3);
addLastElement(4);
//在指定位置插入元素
add(1,2);
//扩容数组
addLastElement(5);
addLastElement(6);
//删除元素
System.out.println("删除的元素为:"+removeElement(0));
stream().forEach(element->{
System.out.println(element);
});
}
int size = 0; //定义大小
int capacity = 4; //定义容量
int[] arr = new int[capacity]; //初始化一个数组
//在最后插入元素
public void addLastElement(int element) {
add(size, element);
}
//在指定位置插入元素
public void add(int index, int element) {
//插入前判断容量是否足够
checkCapacity();
if (index >= 0 && index < size) {
//将元素拷贝到待插入索引的后面
System.arraycopy(arr, index, arr, index+1, size - index);
}
arr[index] = element;
size++;
}
//检查容量
public void checkCapacity(){
if (size == capacity){
//进行扩容
capacity= (int) (capacity*1.5);
//创建新数组
int[] newArr=new int[capacity];
//将原数组拷贝到新数组
System.arraycopy(arr,0,newArr,0,size);
//让原数组等于新数组
arr=newArr;
}
}
//查询元素
public int get(int index){
return arr[index];
}
//删除元素
public int removeElement(int index){
int i = arr[index];
//判断是否为删除的最后一个元素
if (index<size-1){
//将待删除的元素的后面的元素拷贝到前面
System.arraycopy(arr,index+1,arr,index,size-index-1);
}
size--;
return i;
}
//使用stream流遍历元素
public IntStream stream(){
return IntStream.of(Arrays.copyOfRange(arr,0,size));
}
}
图6-1
先定义一个容量为4的数组,如图6-1所示。
图6-2
假设插入三个元素1,3,4,只需要在最后位置插入即可,如图6-2所示。
图6-3
假设在索引为1的位置插入元素2,需要将元素后移为其让出位置,如图6-3所示。
图6-4
假设删除索引为1的元素,需要将其移到最后位置然后将容量减1即可,如图6-4所示。
图6-5
数组的初始容量为4以及占满了,假设要添加元素5,6这时会将原数组扩大为原来的1.5倍,如图6-5所示。