1. 扩容简介
壹哥在前面给大家说过,数组一旦创建初始化后,其长度就不能被改变。但是有的小伙伴就说了,”不对啊,我看别人的文章说,可以往数组中增加很多新数据啊......“。那如果是这样,假如我们一开始定义一个长度为5的数组,然后想把10个数据元素都插进去,这能不能实现?
大家想一下,你能把10升水装到5升的瓶子中吗?肯定不行!如果你非要把10升水都装到瓶子里,肯定需要换一个新的更大的瓶子!
所以今天壹哥跟大家说的”数组扩容“,其实并不是将这些多余的数据装到原有的数组中,而是创建一个新的更大的数组,再把原有数组中的内容都复制到新数组中来!
2. 扩容与缩容流程(重点)
在Java中,数组的”扩容“和”缩容“,并不是真的改变原有数组的大小,而是创建一个新的数组,然后再进行操作,具体流程如下:
● 步骤1:定义一个新数组,新数组的长度要比原数组增加或者减小;
● 步骤2:将原数组中的元素拷贝到新数组中;
● 步骤3:将原数组的名称变量指向新数组。
3. 代码实现
接下来壹哥就按照上面的流程,来带大家实现一下数组的扩容和缩容。
3.1 扩容代码
以下代码是进行数组扩容的案例。
public class Demo05 {
public static void main(String[] args) {
// 数组扩容
// 原数组
int[] oldArr = { 1, 3, 46, 22, 11 };
// 1.定义一个新数组,长度比原数组的长度多1,用于扩容
int[] newArr = new int[oldArr.length + 1];
// 2.数组拷贝
for (int i = 0; i < oldArr.length; i++) {
//数组拷贝,将原来数组的元素拷贝到新数组中
newArr[i] = oldArr[i];
}
// 3.将原数组的名称变量指向新数组
oldArr = newArr;
System.out.println("数组长度="+oldArr.length);
//遍历数组
for (int i = 0; i < oldArr.length; i++) {
//最后一个元素的值是默认值0
System.out.println(oldArr[i]);
}
}
}
这里我们使用newArr[i] = oldArr[i];这样的语句,将旧数组中的元素拷贝到新数组中
3.2 缩容代码
以下代码是进行数组缩容的案例。
public class Demo06 {
public static void main(String[] args) {
// 数组缩容
//定义一个原数组
int[] oldArr = {1,3,46,22,11};
//1.定义一个新数组,新数组的长度比原数组长度少1个
int[] newArr = new int[oldArr.length-1];
//2.进行数组拷贝,将旧数组中的元素拷贝到新数组中
for (int i = 0; i < newArr.length; i++) {
newArr[i] = oldArr[i];
}
//3.将原数组的名称变量指向新数组
oldArr = newArr;
for (int i = 0; i < newArr.length; i++) {
System.out.println(oldArr[i]);
}
}
}