Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java数组扩容

当数组定义完成后,数组存储元素的个数就确定了,因为在定义数组时,要指定数组的长度.  如果想要在数组中存储更多的数据, 就需要对数组扩容。

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));
	}

}