Java复制数组的几种方法
来源:互联网 发布:免费相册制作软件 编辑:程序博客网 时间:2024/05/04 17:10
数组复制的几种常见用法[一维]
System.arraycopy的用法
int[] src = {1,3,5,7,9,11,13,15,17}; int[] dest = {2,4,6,8,10,12,14,16,18,20}; //从src中的第一个元素起复制三个元素,即1,3,5复盖到dest第2个元素开始的三个元素 System.arraycopy(src, 0, dest, 1, 3); System.out.println(Arrays.toString(dest));
结果为:[2, 1, 3, 5, 10, 12, 14, 16, 18, 20]
Arrays.copyOf的用法
int[] src = {1,3,5,7,9,11,13,15,17}; int[] dest = {2,4,6,8,10,12,14,16,18,20}; //copyOf(是复制src数组从0开始的两个元素到新的数组对象)int[] copyof=Arrays.copyOf(src, 2); System.out.println(Arrays.toString(copyof));
结果为:[1, 3]
Arrays.copyOfRange的用法
int[] src = {1,3,5,7,9,11,13,15,17}; int[] dest = {2,4,6,8,10,12,14,16,18,20};//copyRange(从src数组中从0开始的第二个元素到第五个元素复制到新数组,含头不含尾) int[] copyofRange=Arrays.copyOfRange(src, 2,6); System.out.println(Arrays.toString(copyofRange));
结果为:[5, 7, 9, 11]
浅拷贝与深拷贝[包含二维数组复制]
定义一个数组int[] a={3,1,4,2,5}; int[] b=a; 数组b只是对数组a的又一个引用,即浅拷贝。如果改变数组b中元素的值,其实是改变了数组a的元素的值
要实现深度复制,可以用clone或者System.arrayCopy
如下面的代码
1 int[] a={3,1,4,2,5};
2 int[] b=a.clone();
3 b[0]=10;
4 System.out.println(b[0]+” “+a[0]);
输出为10 3
可见改变了b的值,但是没有改变a的元素的值
但是clone和System.arrayCopy都是对一维数组的深度复制。对于二维数组
int[][] a={{3,1,4,2,5},{4,2}};int[][] b=a.clone();b[0][0]=10;System.out.println(b[0][0]+" "+a[0][0]);
输出为10 10
所以clone并不能直接作用于二维数组
因为Java中没有二维数组的概念,只有数组的数组。所以二维数组a中存储的实际上是两个一维数组的引用。当调用clone函数时,是对这两个引用进行了复制。
要证明,只需看下面的输出
int[][] a={{3,1,4,2,5},{4,2}};int[][] b=a.clone();b[0][0]=10;System.out.println(b[0][0]+" "+a[0][0]);System.out.println(a[0]==b[0]);
第5句输出为true。
用clone对二维数组进行复制,要在每一维上调用clone函数
int[][] a={{3,1,4,2,5},{4,2}};int[][] b=new int[a.length][];for(int i=0;i<a.length;i++){ b[i]=a[i].clone();}b[0][0]=10;System.out.println(b[0][0]+" "+a[0][0]);System.out.println(b[0]==a[0]);
输出为
10 3
false
0 0
- Java复制数组的几种方法
- Java中数组复制的几种方法
- Java中数组复制的几种方法
- JAVA中数组复制的几种方法
- Java中数组复制的几种方法
- 数组复制的几种常用方法
- 数组的几种复制方法
- java复制数组的四种方法
- java中复制数组的几种方式
- java中数组复制的几种常见用法
- java 数组复制的方法
- Java数组的复制方法
- 【java】数组复制几种方式比较
- 数组复制的几种常见用法
- java复制数组方法
- java数组复制方法
- Java中数组复制的2种方法
- JAVA中复制数组的五种方法
- PAT B1036. 跟奥巴马一起编程(15)
- linux vi/vim编辑器快捷命令使用
- 动态链接库和静态链接库
- 知道这20个正则表达式,能让你少写1,000行代码
- Android开发人员必备工具库
- Java复制数组的几种方法
- 上线checklist
- 蓝桥杯 算法提高 十进制数转八进制数
- Singleton 创建
- 关于HTML嵌套规则的思考
- 硅谷容器公司Rancher年报:预示着容器时代已来
- LeetCode 483 Smallest Good Base 解题报告
- Android面试宝典总结 --第二章:Android布局
- 极客学院android(一)-----JAVA编程基础知识入门