当数组定义完成后,数组存储元素的个数就确定了,因为在定义数组时,要指定数组的长度. 如果想要在数组中存储更多的数据, 就需要对数组扩容。
package com.wkcto.chapter03.demo01;
import java.util.Arrays;
/**
* 数组扩容
* @author 蛙课网
*
*/
public class Test06 {
public static void main(String[] args) {
// m1(); //完全手动扩容
// m2(); //数组复制调用 了System.arraycopy(0方法
m3(); //调用 Arrays.copyOf(0实现扩容
}
private static void m3() {
// 定义长度为5的数组
int[] data = { 1, 2, 3, 4, 5 };
// 想要在数组中存储更多的数据,需要对数组扩容
//Arrays工具类copyOf(源数组, 新数组的长度) 可以实现数组的扩容
data = Arrays.copyOf(data, data.length*3/2);
System.out.println( Arrays.toString(data));
}
private static void m2() {
//定义长度为5的数组
int [] data = {1,2,3,4,5};
//想要在数组中存储更多的数据,需要对数组扩容
//(1) 定义一个更大的数组
int [] newData = new int[data.length * 3 / 2] ; //按1.5倍大小扩容
//(2)把原来数组的内容复制到新数组中
//把src数组从srcPos开始的length个元素复制到dest数组的destPos开始的位置
// System.arraycopy(src, srcPos, dest, destPos, length);
System.arraycopy(data, 0, newData, 0, data.length);
//arraycopy()方法使用了native修饰,没有方法体, 该方法的方法体可能是由C/C++实现的
//JNI,Java native Interface技术,可以在Java语言中调用其他语言编写的代码
//(3) 让原来的数组名指向新的数组
data = newData;
//
System.out.println( Arrays.toString(data));
}
private static void m1() {
//1)定义长度为5的数组
int [] data = {1,2,3,4,5};
//2)想要在数组中存储更多的数据,需要对数组扩容
//(1) 定义一个更大的数组
int [] newData = new int[data.length * 3 / 2] ; //按1.5倍大小扩容
//(2)把原来数组的内容复制到新数组中
for( int i = 0 ; i < data.length; i++){
newData[i] = data[i];
}
//(3) 让原来的数组名指向新的数组
data = newData;
//
System.out.println( Arrays.toString(data));
}
}