2.5 复制数组

参考书籍:Java面向对象程序设计(第二版)--耿祥义 张跃平编著

 

我们知道数组属于引用类型,也就是说,如果两个类型相同的数组具有相同的引用,那么他们就有完全相同的内存单元

例如:

int a[]={1,2},b[];

如果执行b=a

那么a和b的值就相同,即a的引用和b的引用相同,这样

a[0]和b[0]是相同的内存空间,a[1]和b[1]是相同的内存空间

 

如果我们想把一个数组的元素复制到另外一个数组中,后者元素值的改变不会影响原数组元素的值,反之亦然,这样很明显不能用数组引用赋值的方法

一个方法是用循环(C语言常用)

在下面介绍Java提供的数组之间快速复制,即让System类调用方法

 

 

  1. arraycopy方法

public  static  void arraycopy(sourceArray,int index1,copyArray,int index2,int length)

快速记忆(这个数组,第几索引 , 要变的数组,第几索引 , 长度)

例子:

package p1;

import java.util.Arrays;

public class p1 {
    public static void main(String args[]) {
        char[] a = {'a', 'b', 'c', 'd', 'e', 'f'}, b = {'1', '2', '3', '4', '5', '6'};
        int []c ={1,2,3,4,5,6},d={10,20,30,40,50,60};
        int []e ={1,2,3,4,5,6},f={10,20,30,40,50,60};
        System.arraycopy(a,0,b,0,a.length);  //System类调用方法
        //(数组a索引为0开始,复制到数组b索引从0开始,长度为6)
        System.out.println(Arrays.toString(b));
        System.arraycopy(c,2,d,2,c.length-3);    //6-3=3,长度为3
        //(数组c索引为2开始,复制到数组d索引从2开始,长度为3)
        System.out.println(Arrays.toString(d));
/*        System.arraycopy(e,1,f,3,4);   错误,超过了目的数组的长度
        System.out.println(Arrays.toString(f));*/
    }//如果没有超过,原来有值为原值,没有就补0
}

 

输出结果:

[a, b, c, d, e, f]

[10, 20, 3, 4, 5, 60]

 

 

  1. copyOf和copyOfRange方法

前面的方法有个缺点,就是要事先要创建参数copyArray指定的数组。

Jdk1.6版本后,又提供了两个方法,copyOf和copyOfRange方法

,Arrays类调用方法

 

1》public  static  double  []copyof(double []original,int newLength)

快速记忆(原数组索引0开始,新数组长度),并返回新数组

注意:如果如果newLength(即新数组长度)大于original(即原数组),新数组其后元素取默认值

类似的方法还有

public  static  int  []copyof(int []original,int newLength)

public  static  char  []copyof(char []original,int newLength)

public  static  float  []copyof(float []original,int newLength)

例子:

int a[]={100,200,300,400};

Int []b=Arrays.copyOf(a,5);

即b的数组为[100,200,300,400,0]     最后一个补默认值,int是0

2》public static double []copyOfRange(double []original,int from,int to)

把数组中部分元素的值复制到另外一个数组中

快速记忆(原数组,开始索引即from,结束索引即to-1),并返回新数组,新数组长度是to-from

注意,如果to的值大于original(即原数组)的长度,新数组的第original.length-from索引开始的元素取默认值

类似方法和前面一样

例子:

int a[]={100,200,300,400,500,600};

Int []b=Arrays.copyOfRange(a,2,5);

即b的数组为[300,400,500]

看得时候可以索引2开始,5-2=3个

或者这样看索引2开始,到索引5-1=4

 

猜你喜欢

转载自blog.csdn.net/weixin_42717928/article/details/81234607
2.5