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

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

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)形式输出即可

	}

}


 

 

 

你可能感兴趣的:(算法)