1.数组扩容
因为数组的长度是固定不变的,所以想要实现数组扩容,我们需要创建一个新的数组来帮助我们,并且新数组长度要比原数组+1。
示范代码如下:
// 数组扩容
int[] arr = {1,2,3,4,5};
System.out.println("请输入要添加的数:");
int num = sc.nextInt();
int[] arr1 = new int[arr.length + 1];
for(int i = 0; i < arr.length; i++) {
arr1[i] = arr[i]; //将原数组长度部分 依次拷贝
}
arr1[arr1.length - 1] = num; //在新数组最后位置上加上要添加的数
arr = arr1;
System.out.println(Arrays.toString(arr));
输出结果:
图解过程:
2.数组翻转
第一种方法:
将数组长度除以二,以中间为界,将左右两端的元素依次交换,如:下标0与下标arr.length - 1互换,下标1与下标arr.length - 2互换,以此类推。
代码如下:
int[] arr = {1,2,3,4,5};
for(int i = 0; i < arr.length / 2; i++) {//数组两端互换
int temp = arr[i];
arr[i] = arr[arr.length - 1 -i];
arr[arr.length - 1 -i] = temp;
}
System.out.println(Arrays.toString(arr));
运行结果:
图解过程:
第二种方法:
新建一个相同长度的数组,逆序遍历原数组并拷贝过来。代码如下:
int[] arr = {1,2,3,4,5};
int[] arr1 = new int[arr.length];
for(int i = arr.length - 1, j = 0; i >= 0; i--, j++) {// i 和 j两个变量 分别用于旧数组和新数组
arr1[j] = arr[i];
}
arr = arr1;
System.out.println(Arrays.toString(arr));
运行结果:
图解过程:
3.数组删除元素
第一种方法:
输入要删除的下标,新建一个长度-1的数组。遍历新数组,当i小于要删除的下标index时,正常拷贝过来,当i大于等于index时,新数组下标i拷贝原数组的下标i+1。
int[] arr = {1,2,3,4,5};
System.out.println("请输入要删除的下标:");
int index = sc.nextInt();
int[] arr1 = new int[arr.length - 1];
for(int i = 0; i < arr1.length; i++) {
if(i < index) {
arr1[i] = arr[i];
}
if(i >= index) {
arr1[i] = arr[i + 1]; //新数组下标i拷贝原数组的下标i+1
}
}
arr = arr1;
System.out.println(Arrays.toString(arr));
运行结果:
图解过程:
第二种方法:
这种方法和第一种本质上一样,只不过是定义了一个辅助变量c,遇到要删除的下标后c++,以此来实现通过c的变化控制拷贝的数组元素下标。
int[] arr = {1,2,3,4,5};
System.out.println("请输入要删除的下标:");
int index = sc.nextInt();
int[] arr1 = new int[arr.length - 1];
int c = 0; //定义一个辅助变量c 来控制
for(int i = 0; i < arr1.length; i++) {
if(i == index) {
c++; //当遇到要删除的下标, c++
}
arr1[i] = arr[i + c];
}
arr = arr1;
System.out.println(Arrays.toString(arr));
运行结果: