数组的复制与动态扩展算法

public class ArrayCopyDemo {
	/**
	 * 数组的复制不动态扩展算法
	 */
	public static void main(String[] args) {
		int[] ary1 = new int[] { 1, 2, 3, 4 };
		// 数组的复制
		int[] ary2 = ary1;// 一个数组对象,两个引用同时引用
		// 相当于两个名词(数组变量ary1和ary2)同时指代一个事物,数组对象。
		System.out.println(ary1[1]);
		System.out.println(ary2[1]);
		ary2[2] = 9;
		/* 这种现象叫数组赋值,可以发现如果这样赋值,数组对象没有隔离性,丌小心就修改了 */
		System.out.println(ary1[2]);
	}
}

我们使用数组对象的复制来实现数组的隔离性

 

import java.util.Arrays;

public class ArrayCopyDemo1 {

	/**
	 * 新数组ary3是数组ary1的副本,ary3是新数组 ary1和ary3分别指向丌同对象,内存示意图如下所示:
	 */
	public static void main(String[] args) {
		int[] ary1 = new int[] { 1, 2, 3, 4 };
		int[] ary3 = new int[ary1.length];// 空数组
		for (int i = 0; i < ary1.length; i++) {
			ary3[i] = ary1[i];// 将每个元素赋值一遍
		}
		ary3[0] = 99;
		System.out.println(Arrays.toString(ary1));
		System.out.println(Arrays.toString(ary3));
	}
}

内存图如下:

数组的扩展问题:

先明确一点,Java数组对象的大小是固定的,数组对象是丌能扩展的,我们利用数组复制的方法可以变通的实现数组扩展。创建数组副本的同时将数组长度增加就变通的实现了,数组的扩展。
 System.arraycopy() 可以复制数组
 Arrays.copyOf() 可以简便的创建数组副本。

Java提供的数组复制的方法

 

import java.util.Arrays;

public class Test {

	/**
	 * Java提供的数组复制的方法
	 */
	public static void main(String[] args) {
		char[] cArr = { '北', '京' };
		char[] temp = Arrays.copyOf(cArr, 4);// 新数组长度为4,后两位自动赋值0
		char[] cArr2 = temp;
		cArr2[2] = '帅';
		cArr2[3] = '哥';
		System.out.println(cArr2);
		//如果想看数组元素内容,以后统一使用Arrays.toString(arr)形式输出即可
	}
}


 

 

 

posted @ 2013-07-15 22:33  jlins  阅读(417)  评论(0编辑  收藏  举报