数组扩容的方式

扩容原因:

Java数组对象在定义的时候必须指定大小,且数组对象本身是不可扩容的。

public static void main(String[] args) {
		int []number = {1,2,3}; //定义数组
		number[4]=1;
}

扩容方式1:

建立一个新的数组,通过for循环来进行拷贝扩容

public static void main(String[] args) {
		int []number = {1,2,3}; //定义数组
		int[] appendNumber=new int[number.length*2];//number.length:长度,number数组的长度,即数组中数据的个数
		for(int i=0;i<number.length;i++){
			appendNumber[i]=number[i];
		}
		appendNumber[3]=1;
		appendNumber[4]=1;
		appendNumber[5]=1;
		System.out.println(Arrays.toString(appendNumber));//这个函数就是将数组appendNumber进行遍历并输出
}

扩容方式2:

System.arraycopy()实现复制数组

public static void main(String[] args) {
		int []number = {1,2,3}; //定义数组
		int[] appendNumber=new int[number.length*2];//a.length:长度,a数组的长度,即数组中数据的个数
		System.arraycopy(number,0,appendNumber,0,number.length); 
		appendNumber[3]=1;
		appendNumber[4]=1;
		appendNumber[5]=1;
		System.out.println(Arrays.toString(appendNumber));//这个函数就是将数组b进行遍历并输出
}

System.arraycopy(src, srcPos, dest, destPos, length); 

Object src : 原数组
int srcPos : 从元数据的起始位置开始
Object dest : 目标数组
int destPos : 目标数组的开始起始位置
int length  : 要copy的数组的长度

 

扩容方式3:

Arrays.copyOf()可以简便的创建数组副本

public static void main(String[] args) {
		int []number = {1,2,3}; //定义数组
		int[] appendNumber=Arrays.copyOf(number, number.length*2);//a.length:长度,a数组的长度,即数组中数据的个数
		appendNumber[3]=1;
		appendNumber[4]=1;
		appendNumber[5]=1;
		System.out.println(Arrays.toString(appendNumber));//这个函数就是将数组b进行遍历并输出
		
}

Arrays.copyOf(original, newLength)

original:原数组 

newLength:新数组大小

 

本质:

创建数组副本的同时将数组长度增加就变通的实现了数组的扩容

 

 

效率问题:

System.arraycopy >Arrays.copyOf>for循环

 

 

 

 

 

posted @ 2020-12-31 10:15  彼岸-花已开  阅读(497)  评论(0编辑  收藏  举报