精华内容
下载资源
问答
  • 主要介绍了java数组复制的四种方法效率对比,文中有简单的代码示例,以及效率的比较结果,具有一定参考价值,需要的朋友可以了解下。
  • 这里介绍java数组复制的4种方式极其问题: 第一种方式利用for循环: int[] a={1,2,4,6}; int length=a.length; int[] b=new int[length]; for (int i = 0; i  b[i]=a[i]; } 第二...

    AVA数组的复制是引用传递,而并不是其他语言的值传递。

    这里介绍java数组复制的4种方式极其问题:

    第一种方式利用for循环:

    int[] a={1,2,4,6};

    int length=a.length;

    int[] b=new int[length];

    for (int i = 0; i < length; i++) {

    b[i]=a[i];

    }

    第二种方式直接赋值:

    int[] array1={1,2,4,6};

    int[] array2=a;


    这里把array1数组的值复制给array2,如果你这样去运行,就会发现此时两个数组的值是一样的。把array2=array1;替换为System.arraycopy(array1,
    0, array2, 0, array1.length);就能把array1中的数值复制给array2,而两者并不指向同样的地址。

     

    第三种方式:

    利用Arrays自带的copyof

     int copy[] = Arrays.copyOf(a, a.length);

     

    第四种方式:

    这里再介绍一下System.arraycopy这个函数,从JAVA API中找了一段。大家看一下。

    public static voidarraycopy(Object src, int srcPos, Object dest, int destPos, int length)从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从src引用的源数组到dest引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于length参数。源数组中位置在srcPos到srcPos+length-1之间的组件被分别复制到目标数组中的destPos到destPos+length-1位置。

    如果参数src和dest引用相同的数组对象,则复制的执行过程就好像首先将srcPos到srcPos+length-1位置

    的组件复制到一个带有length组件的临时数组,然后再将此临时数组的内容复制到目标数组的destPos到

    destPos+length-1位置一样。

    If 如果dest为null,则抛出NullPointerException异常。

    如果src为null, 则抛出NullPointerException异常,并且不会修改目标数组。

    否则,只要下列任何情况为真,则抛出ArrayStoreException异常并且不会修改目标数组:

    src参数指的是非数组对象。
    dest参数指的是非数组对象。
    src参数和dest参数指的是那些其组件类型为不同基本类型的数组。
    src参数指的是具有基本组件类型的数组且dest参数指的是具有引用组件类型的数组。
    src参数指的是具有引用组件类型的数组且dest参数指的是具有基本组件类型的数组。

    否则,只要下列任何情况为真,则抛出IndexOutOfBoundsException异常,并且不会修改目标数组:

    srcPos参数为负。
    destPos参数为负。
    length参数为负。
    srcPos+length大于src.length,即源数组的长度。
    destPos+length大于dest.length,即目标数组的长度。

    否则,如果源数组中srcPos到srcPos+length-1位置上的实际组件通过分配转换并不能转换成目标数组的组

    件类型,则抛出ArrayStoreException异常。在这种情况下,将k设置为比长度小的最小非负整数,这样就

    无法将src[srcPos+k]转换为目标数组的组件类型;当抛出异常时,从srcPos到srcPos+k-1位置上的源数组

    组件已经被复制到目标数组中的destPos到destPos+k-1位置,而目标数组中的其他位置不会被修改。(因

    为已经详细说明过的那些限制,只能将此段落有效地应用于两个数组都有引用类型的组件类型的情况。)

    参数:src- 源数组。
    srcPos- 源数组中的起始位置。
    dest- 目标数组。
    destPos-
    目标数据中的起始位置。
    length-
    要复制的数组元素的数量。
    抛出:IndexOutOfBoundsException-
    如果复制会导致对数组范围以外的数据的访问。
    ArrayStoreException- 如果因为类型不匹配而使得无法将src数组中的元素存储到dest数组中。
    NullPointerException- 如果src或dest为null。


    参考网址:http://hi.baidu.com/1039580989/item/b1a5915f812bf018da16351d

    展开全文
  • java数组复制

    2016-01-26 22:34:30
    java数组复制要从java的变量传递类型讲起。 java的变量传递分为值传递和引用传递。 基本数据类型的赋值是值传递,数组以及Class的的赋值是引用传递。 当我想保存数组a时,习惯性的采取了 int[] a = {1,2,3} ...

    讲java的数组复制要从java的变量传递类型讲起。

    java的变量传递分为值传递和引用传递。

    基本数据类型的赋值是值传递,数组以及Class的的赋值是引用传递。


    当我想保存数组a时,习惯性的采取了

    <pre name="code" class="java">int[]  a = {1,2,3}
    int[]  b = a;

    
    因为数组的赋值是引用传递,所以a,b是指向同一块表示该数组内存地址
    

    对a的操作,会影响到b的值,所以并没有起到保存a的作用。

    对于一维数组来说,可以用

    int[]  a = {1,2,3}
    int[]  b = a.clone();

    这样a,b分别指向不同的内存区域,并且此时他们的值也是一样的。

    对于多维数组,

    int[][] a = {{1,2,3},{4,5,6}};
    int [][] b = a.clone();
    

    事实上,并没有起到作用,因为在java底层实现中多维数组是数组中的数组。因为这段的代码只是让a,b指向了不同的内存区域,假设为A,B,但A,B却又共同指向了里层数组arr1,arr2。

    正确的代码是

    public int[][] copy2DArr(int[][] a) {
    		int[][] b = new int[a.length][2];
    		for (int i = 0; i < a.length; i++) {
    			b[i] = a[i].clone();
    		}
    		return b;
    	}



    所以调用clone()的对象一定要是代表多维数组最里层的的数组对象


    展开全文
  • 数组如下 创建新数组,并赋值 int a[] = new int[20];...三种方法如下 int b[] = Arrays.copyOfRange(a, 0, 20); int c[] = Arrays.copyOf(a, 10); int d[] = new int[30]; System.arraycopy(a, 10, d, 5, 1.

    源数组如下

    创建新数组,并赋值

    int a[] = new int[20];
    
    for (int i = 0; i < a.length; i++) {
            a[i] = i + 15;
     }

     三种方法如下

    int b[] = Arrays.copyOfRange(a, 0, 20);
    
    int c[] = Arrays.copyOf(a, 10);
    
    int d[] = new int[30];
            System.arraycopy(a, 10, d, 5, 10);

     整个代码如下

    每个方法的详细使用及参数意义在注释中

    package arrayCopy;
    
    import java.util.Arrays;
    
    public class Copys {
    	public static void main(String[] args) {
    
    		int a[] = new int[20];
    		for (int i = 0; i < a.length; i++) {
    			a[i] = i + 15;
    		}
    
    		int b[] = Arrays.copyOfRange(a, 0, 20);
    		int c[] = Arrays.copyOf(a, 10);
    		int d[] = new int[30];
    		System.arraycopy(a, 10, d, 5, 10);
    
    		System.out.print("源数组: ");
    		for (int i : a) {
    			System.out.print(i + " ");
    		}
    		System.out.println();
    		System.out.println();
    
    		System.out.println("Arrays.copyOfRange(a, 2, 10)结果:   ");
    		for (int t : b) {
    			System.out.print(t + " ");
    		}
    		/*
    		 该方法作用是把a数组从0开始复制,复制到哪里 
    		 参数意义(原数组,源数组开始复制位置,源数组截止位置+1)
    		 如果要复制整个数组,则参数为(a,0,20) 
    		 新数组长度可以比原数组长,如(a,2,30), 结果就是
    		 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 0 0 0 0 0 0 0 0 0 0
    		 */
    		System.out.println();
    		System.out.println();
    		
    
    		System.out.println("Arrays.copyOf(a, 10)结果:");
    		for (int t : c) {
    			System.out.print(t + " ");
    		}
    		/*
    		 该方法作用是简单复制数组,从源数组的下标0开始,复制10个数
    		 参数意义(源数组,从0开始到截止位置+1)
    		 如果复制整个数组,则参数为Arrays.copyOf(a, 10),结果就是
    		 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 
    		 和Arrays.copyOfRange一样,也可以用作扩容,新数组可以比原数组大,比如Arrays.copyOfRange(a, 2, 30)结果如下
    		 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 0 0 0 0 0 0 0 0 0 0
    		 */
    		System.out.println();
    		System.out.println();
    
    		System.out.println("System.arraycopy(a, 10, d, 5, 3)结果:");
    		for (int t : d) {
    			System.out.print(t + " ");
    		}
    		/*
    		 该方法作用是把源数组a从第10个数开始,复制到新数组第5个位置,总共复制3个数
    		 参数意义(源数组,源数组开始下标,新数组,新数组开始下标,原数组截止下标+1)
    		 如复制5个数为参数设置为System.arraycopy(a, 10, d, 5, 5)
    		 0 0 0 0 0 25 26 27 28 29 0 0 0 0 0 
    		 最后一个参数不能超过源数组长度,如当前源数组长度为20,从第10个开始复制,则该参数最大只能是10,否则会有溢出报错
    		 */
    		System.out.println();
    
    	}
    }
    

    结果截图如下

    展开全文
  • JAVA里面,可以用复制语句"A=B"给基本类型...以下是归纳的JAVA复制数组方法: 1.使用FOR循环,将数组的每个元素复制或者复制指定元素,不过效率差一点 2.使用clone方法,得到数组的值,而不是引用,不能复制指定元

    在JAVA里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变.

    以下是归纳的JAVA中复制数组的方法:

    1.使用FOR循环,将数组的每个元素复制或者复制指定元素,不过效率差一点
    2.使用clone方法,得到数组的值,而不是引用,不能复制指定元素,灵活性差一点
    3.使用System.arraycopy(src, srcPos, dest, destPos, length)方法,推荐使用

    举例:
    1.使用FOR循环
    int[] src={1,3,5,6,7,8};
    int[] dest = new int[6];
    for(int i=0;i dest = src;
    }

    2.使用clone
    int[] src={1,3,5,6,7,8};

    int[] dest;

    dest=(int[]) src.clone();//使用clone创建副本,注意clone要使用强制转换,

    3.使用System.arraycopy
    int[] src={1,3,5,6,7,8};
    int[] dest = new int[6];

    System.arraycopy(src, 0, dest, 0, 6);

    -------------------------------------------------------------------
    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).

    转载自:http://wpblog.blog.hexun.com/28883111_d.html

    展开全文
  • java数组复制方法System.arraycopy()的使用说明

    万次阅读 多人点赞 2020-04-30 18:27:47
    目录使用方法参数:源码示例代码 使用方法 public static native void arraycopy...src:要复制数组(源数组) srcPos:复制数组的起始位置 dest:目标数组 destPos:目标数组的下标位置 length:要复制的长...
  • java数组复制的问题

    2019-03-23 20:01:54
    java 数组内存地址 数组:引用类型 int[] a=null;//声明数组,也是引用 a=new int[5];//分配内存地址。 数组的引用 第一步,当声明数组时在栈中开辟一个地址空间 ,即a的引用地址 第二步,在堆中开辟一系统连续的...
  • java数组复制的4种方式,java数组拷贝问题 JAVA数组的复制是引用传递,而并不是其他语言的值传递。 这里介绍java数组复制的4种方式极其问题: 第一种方式利用for循环: int[] a={1,2,4,6}; int ...
  • java数组复制问题

    2015-11-25 18:27:01
    今天帮同学看蓝桥杯练习题时,想把一个c语言的小程序改成java程序时... 数组复制方法现在至少有四个思路:  1 使用循环结构 这种方法最灵活。唯一不足的地方可能就是代码较多  2 使用Object类的clone()方法, 这
  • java数组复制的效率

    千次阅读 2016-09-09 17:52:30
    AVA语言的下面几种数组复制方法中,哪个效率最高? 正确答案: B 你的答案: D (错误) for循环逐一复制 System.arraycopy System.copyof 使用clone方法  A、for循环的...
  • JAVA数组复制、截取

    千次阅读 2020-06-28 19:56:32
    将指定数组original,从下标from开始复制复制到下标to,返回一个新的数组T[] 示例: File[] fileArray = file.listFiles(); File[] newFileArray = Arrays.copyOfRange(fileArray, 0, 10); ...
  • Java数组复制到List中的方法

    千次阅读 2017-05-18 15:09:45
    public class Point { int x; int y; public Point() { x = 0; y = 0; } public Point(int a, int b) { x = a; y = b; } }方法一:for循环public List<Point> fun
  • Java数组复制(拷贝)

    2017-05-04 17:20:26
    数组复制 可以把一个数组的变量赋值给另外一个数组,但是两个变量引用的都是同一个内存空间,因此,这种情况下,改变一个数组的值,另一个数组变量也会改变。例如:public class Arraycopy{ public static void ...
  • java 数组复制:System.arrayCopy 深入解析  (2013-06-04 17:02:17) 转载▼ 标签:  java   system   arraycopy   深入解析   教程   it 分类: 转载 ...
  • (java 必备知识)   ArrayList 的实现代码:    其实ArrayList 就是一个数组的形式存放数据的. 没有高深的地方.他的性能在于他的索引能力,正因为他是数组形式,所以索引元素的时候他表现得非常...
  • 我们知道在方法中用到的数组是存在内存中的...为了实现深度复制数组我们可以借助Arrays.copyof()方法。如下: 从运行结果我们可以看到,通过copyof方法复制数组 进行修改操作不影响原始数组。 我们从Arrays.copyo
  • java 数组复制 Java允许您将一个数组的值复制到另一个数组中。 可以通过使用 System类的arraycopy方法。 可以使用以下形式: System.arraycopy(from,fromIndex,to,toIndex,count); from-指定要从中复制的...
  • JAVA数组常用方法

    2014-04-20 11:32:41
    JAVA的类库java.util.Arrays提供了诸多操作数组方法,在此对常用的方法做个简单的介绍。  1.Arrays.equals(a1,a2)方法:a1和a2既可以是基本数据类型,也可以是Object类型。数组相等的条件是元素个数必须相等,...
  • Java数组复制(浅/深拷贝)之一

    千次阅读 2019-05-01 19:26:13
    java数组拷贝主要有四种方法,分别是循环赋值,System.arraycopy(),Arrays.copyOf()(或者Arrays.copyOfRange)和clone()方法。下面分别介绍一下这几种拷贝。 1、循环拷贝(速度相对比较慢) 循环拷贝其实没什么好说...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 224,902
精华内容 89,960
关键字:

java数组复制方法

java 订阅