读书人

一些Java的基本知识二

发布时间: 2012-12-19 14:13:14 作者: rapoo

一些Java的基本知识2

?在Java中,允许将一个数组变量拷贝给另一个数组变量。这是,这两个变量将引用同一个数组:

?????int[] luckyNumbers = smallPrimes;

?????luckyNumbers[5] = 12;//now smallPrimes[5] is also 12

????如果希望将一个数组的所有值拷贝到另一个数组中去,就要使用System类的arraycopy方法。调用这个方法的语法格式为:

?????System.arraycopy(from,fromindex,to,toindex,count);

????数组必须有足够的空间来存放拷贝的元素。

????例如,下面这段代码所得到的结果是它创建了两个数组,然后将第一个数组的后4个元素拷贝到第2个数组中。拷贝从源数组中的第2个位置开始,一共拷贝4个元素,目标数组的起始位置为3。

?????int[] smallPrimes = {2,3,5,7,11,13};

?????int[] luckyNumbers = {1001,1002,1003,1004,1005,1006,1007};

?????System.arraycopy(smallPrimes,2,luckyNumbers,3,4);

?????for(int i = 0;i < luckyNumbers.length;i++)

?????{

??????????System.out.println(i + ":" + luckyNumbers[i]);

?????}

????输出结果为:

?????0:1001

?????1:1002

?????2:1003

?????3:5

?????4:7

?????5:11

?????6:13

需要将数组的所有值拷贝时,就得使用Arrays类的copyOf方法:

int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumber,luckyNumber.length)

也可用来增加数组长度,比如:

luckyNumbers = Arrays.copyOf(luckyNumber,2*luckyNumber.length)

?

补充:

System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是:

public static void arraycopy(Object src,
???????????????????????????? int srcPos,
???????????????????????????? Object dest,
???????????????????????????? int destPos,
???????????????????????????? int length)

src:源数组;?srcPos:源数组要复制的起始位置;dest:目的数组;?destPos:目的数组放置的起始位置;?length:复制的长度。

注意:src and dest都必须是同类型或者可以进行转换类型的数组.有趣的是这个函数可以实现自己到自己复制,比如:

int[] fun ={0,1,2,3,4,5,6}; System.arraycopy(fun,0,fun,3,3);则结果为:{0,1,2,0,1,2,6};

实现过程是这样的,先生成一个长度为length的临时数组,将fun数组中srcPos 到srcPos+length-1之间的数据拷贝到临时数组中,再执行System.arraycopy(临时数组,0,fun,3,3).

读书人网 >编程

热点推荐