2022-07-16 第一小组 田龙月 ArrayList的方法底层实现
Arraylist插入元素方法底层实现逻辑
主要是第二个for循环的逻辑,for循环控制的是总共移动的次数:假如数组一共4个元素,我要插入在第二个位置,那么我一共需要的移动的元素个数是3个,我们使用的方法是从后面的元素开始移动,我们就一共需要移动三次,我们是使用i控制每次需要移动的元素的下标,每次循环让每一个元素移动到它后面一个索引位置。
// 被占用索引处后面的数字每个都像后移动一位 for (int i = 1; i < numArr.length-targetIndex; i++) { numArr[numArr.length-i]=numArr[numArr.length-1-i]; } // 移动后空出一位给被占用的数字 numArr[targetIndex+1]=tempNum;
| 1(index=0) | 2(index=1) | 3(index=2) | 4(index=3) |想插入的位置
| ---- | ---- | ---- | ---- |
| 4 (4-0) | 3(4-1) | 2(4-2) | 1(4-3) |循环(移动)次数(数组长度-插入位置下表)length=4
(os:只实现了插入一个数据,插入数组待更新)
点击查看全部代码
package com.javatest;
import java.util.Arrays;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
// 初始化数组
int [] numArr=new int[]{1,2,3,4,5};
System.out.println("插入前数组为");
System.out.println(Arrays.toString(numArr));
Scanner scanner=new Scanner(System.in);
// 存储想要存储的坐标
System.out.println("请输入想插入的位置");
int targetIndex=scanner.nextInt();
// 存储目标数字
System.out.println("请输入想插入的数字");
int num=scanner.nextInt();
// 数组扩容
if (numArr[numArr.length-1]!=0){
int [] newNumArr=new int[numArr.length*2];
for (int i = 0; i < numArr.length; i++) {
newNumArr[i]=numArr[i];
}
numArr=newNumArr;
}
int tempNum=numArr[targetIndex]; //用来存储被占用的索引的值
// 被占用索引处后面的数字每个都像后移动一位
for (int i = 1; i < numArr.length-targetIndex; i++) {
numArr[numArr.length-i]=numArr[numArr.length-1-i];
}
// 移动后空出一位给被占用的数字
numArr[targetIndex+1]=tempNum;
System.out.println("插入后数组为");
System.out.println(Arrays.toString(numArr));
}
}

浙公网安备 33010602011771号