一.数组的动态扩容
原理:
1.根据原来数组的长度创建一个新数组;
2.把原来数组的元素进行等索引位置复制到新数组;
3.把待添加的元素放到新数组的最后
代码如下:
//声明并初始化数组
int[] arr = {11,22,33};
System.out.print("扩容前:");
print(arr);
//进行数组的动态扩容
arr = add(arr,44);
System.out.print("扩容后:");
print(arr);
/*
动态扩容的两个明确:
返回类型:int[]
形参列表:int[] oldArr , int num
*/
public static int[] add (int[] oldArr , int num) {
//进行数组的非空校验
if (oldArr == null) {
System.out.println("错误:数组为空");
return oldArr;
}
//根据原来数组的长度创建新数组
int[] newArr = new int[oldArr.length + 1];
//进行数组中元素的复制
for (int i = 0; i < oldArr.length; i++) {
//进行等索引位置复制
newArr[i] = oldArr[i];
}
//将待添加元素存储到新数组的最后一个索引位置
newArr[newArr.length - 1] = num;
//返回新数组
return newArr;
}
二.数组的动态删除
原理:
1.输入一个被删除数组元素的索引值index
2.根据原来数组的长度-1 创建一个新数组;
3.把原来数组的元素进行等索引位置复制到新数组;
4.在复制过程中进行判断,如果 i < index,则直接将 oldarr[i] 复制到新数组;
如果 i >= index ,则将oldarr [ i + 1] 复制到新数组
代码如下:
int[] arr = {11,22,33};
System.out.print("删除前:");
print(arr);
//进行数组的动态删除
arr = remove(arr,1);
System.out.print("删除后:");
print(arr);
/*
动态删除的两个明确:
返回类型:int[]
形参列表:int[] oldArr , int index
*/
public static int[] remove (int[] oldArr , int index ) {
//进行数组的非空校验
if (oldArr == null) {
System.out.println("错误:数组为空");
return oldArr;
}
//进行非法索引校验
if (index < 0 || index >= oldArr.length) {
System.out.println("错误:索引非法");
return oldArr;
}
//根据原来数组的长度创建新数组
int[] newArr = new int[oldArr.length - 1];
//进行数组中元素的复制
for (int i = 0; i < newArr.length; i++) {
if (i < index) {
newArr[i] = oldArr[i];
} else {
newArr[i] = oldArr[i+1];
}
}
return newArr;
}
三.数组的动态插入
原理:
1.输入一个插入数组元素的索引值index
2.根据原来数组的长度 +1 创建一个新数组;
3.把原来数组的元素进行等索引位置复制到新数组;
4.在复制过程中进行判断,如果 i < index,则直接将 oldarr [ i ] 复制到 newarr [ i ];
如果 i >= index ,则将oldarr [ i + 1] 复制到新数组 newarr [ i + 1];
代码如下:
//声明并初始化数组
int[] arr = {11,22,33};
System.out.print("插入前:");
print(arr);
//进行数组的动态插入
arr = insert(arr,2,55);
System.out.print("插入后:");
print(arr);
/*
动态插入的两个明确:
返回类型:int[]
形参列表:int[] oldArr , int index , int num
*/
public static int[] insert (int[] oldArr , int index , int num) {
//进行数组的非空校验
if (oldArr == null) {
System.out.println("错误:数组为空");
return oldArr;
}
//进行非法索引校验
if (index < 0 || index >= oldArr.length) {
System.out.println("错误:索引非法");
return oldArr;
}
//根据原来数组的长度创建新数组
int[] newArr = new int[oldArr.length + 1];
//进行数组中元素的复制
for (int i = 0; i < oldArr.length; i++) {
if (i < index) {
//进行等索引位置复制
newArr[i] = oldArr[i];
} else {
//进行错索引位置复制
newArr[i + 1] = oldArr[i];
}
}
//将待插入元素存储到新数组的指定索引位置
newArr[index] = num;
return newArr;
}
小白有话说:
如果有什么写的不对的地方,恳请大家指出来(评论或者私信我)!
也欢迎互相讨论啦~