Java数组的动态扩容,删除,插入


一.数组的动态扩容

原理:
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;
	}

小白有话说:
如果有什么写的不对的地方,恳请大家指出来(评论或者私信我)!
也欢迎互相讨论啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jwwy*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值