数组的扩容我这里给出了三种的扩容方式:
主要运用了两种数组的特性:
(1)址传递
(2)寻址算法:数组名为首地址可得到一个公式
下一个数据的地址数: 首地址+数组类型所占字节数*下标
1.基础方式:
1)先创建一个更大的数组
2)将原数组中的数据放置到新数组中
3)原数组赋值给新数组
例子:
package classes;
public class TestArray1{
public static void main(String[] args){
int[] arr={1,2,3,4,5};
//1.先创建一个更大的数组
int[] arr2 = new int[arr.length*2];
//2.将原数组的数组赋值给新数组
for(int i=0;i<arr.length;i++){
arr2[i] = arr[i];
}
//3.新数组赋值给原数组
arr = arr2;
arr[5] = 6;
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
2.arraycopy代替了复制元素的操作:
1)先创建一个更大的数组
2)使用System.arraycopy(a,b,c,d,e);
参数列表:
a:原数组名
b:从原数组的第几个元素开始复制
c:新数组
d:从新数组的第几个元素开始复制
e:复制几个元素
例子:
package classes;
public class TestArray2{
public static void main(String[] args){
int[] arr={1,2,3,4,5};
//1.先创建一个更大的数组
int[] arr2 = new int[arr.length*2];
//2.将原数组的数组赋值给新数组
System.arraycopy(arr,1,arr2,1,4);
//3.新数组赋值给原数组
arr = arr2;
arr[5] = 6;
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
3. copyOf直接代替了上面的三步:
调用java.util.Arrays;包下的copyOf方法,返回值是一个已经扩容数组的首地址,然后将其复制给原数组
例子:
package classes;
import java.util.Arrays;
public class TestArray3{
public static void main(String[] args){
int[] arr={1,2,3,4,5};
//调用copyOf方法,返回值是数组的首地址,然后赋值给原数组
arr=Arrays.copyOf(arr,arr.length*2);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}