java面试题网

普通会员

483

帖子

9

回复

187

积分

楼主
发表于 2019-08-26 15:24:39 | 查看: 5104| 回复: 0

java数组扩容

java数组扩容

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

java数组扩容_www.wityx.com

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

}


文章来自www.wityx.com,转载请注明出处!原文地址http://www.wityx.com/post/1158_1_1.html


java面试题交流群:327440556

您需要登录后才可以回帖 登录 | 立即注册

java面试题网www.wuliaokankan.cnjava建站系统提供技术支持V2.1 网站地图 © 2016-2018