Java 数组拷贝
来源:互联网 发布:php一般用什么开发工具 编辑:程序博客网 时间:2024/06/05 04:29
JAVA语言的下面几种数组复制方法中,哪个效率最高?A.for循环逐一复制B.System.arraycopyC.System.copyofD.使用clone方法效率:System.arraycopy > clone > Arrays.copyOf > for循环
System.arraycopy
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
参数说明: src - 源数组
srcPos - 源数组中的起始位置
dest - 目标数组
destPos - 目标数据中的起始位置
length - 要复制的数组元素的数量
示例:
public class Main{ public static void main(String[] args) { int[] a1={1,2,3,4,5,6}; int[] a2={11,12,13,14,15,16}; System.arraycopy(a1, 2, a2, 3, 2); System.out.print("copy后结果:"); for(int i=0;i<a2.length;i++){ System.out.print(a2[i]+" "); } } }
输出: copy后结果:11 12 13 3 4 16
clone
java.lang.Object类的clone()方法为protected类型,不可直接调用,需要先对要克隆的类进行下列操作:
首先被克隆的类实现Cloneable接口;
然后在该类中覆盖clone()方法,并且在该clone()方法中调用super.clone();
这样,super.clone()便可以调用java.lang.Object类的clone()方法。
// 被克隆的类要实现Cloneable接口 class Cat implements Cloneable { private String name; private int age; public Cat(String name,int age) { this.name=name; this.age=age; } // 重写 toString() public String toString(){ return name+ " " +age; } // 重写 clone()方法 protected Object clone()throws CloneNotSupportedException{ return super.clone() ; } } public class Clone { public static void main(String[] args) throws CloneNotSupportedException{ Cat cat1=new Cat("xiaohua",3); System.out.println(cat1); // 调用clone方法 Cat cat2=(Cat)cat1.clone(); System.out.println(cat2); } }
输出: xiaohua 3
xiaohua 3
如果没有重写toString()方法,将输出: Cat@7852e922
Cat@4e25154f
由此可见,clone后,两个对象的地址不同,但内容相同
复制引用和复制对象的区别
- 复制引用:是指将某个对象的地址复制,所以复制后的对象副本的地址和源对象相同,这样,当改变副本的某个值后,源对象值也被改变;
- 复制对象:是将源对象整个复制,对象副本和源对象的地址并不相同,当改变副本的某个值后,源对象值不会改变;
Cat cat1=new Cat("xiaohua:",3); // 源对象 System.out.println("源对象地址"+cat1); // 调用clone方法,复制对象 Cat cat2=(Cat)cat1.clone(); // 复制引用 Cat cat3=(Cat)cat1; System.out.println("复制对象地址:"+cat2); System.out.println("复制引用地址:"+cat3);
源对象地址:Cat@7852e922
复制对象地址:Cat@4e25154f
复制引用地址:Cat@7852e922
可以看出,复制引用的对象和源对象地址相同,复制对象和源对象地址不同
Arrays.copyOf
Arrays.copyOf() 有十种重载方法,复制指定的数组,返回原数组的副本
- 包括8种基本类型
- 如有需要,采用默认值填充
static T[] copyOf(T[] original, int newLength)
复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度
转自:http://blog.csdn.net/tingzhiyi/article/details/52344845
- java拷贝数组(深拷贝)
- Java 数组 的 拷贝
- java中数组拷贝
- java中拷贝数组
- Java 数组的拷贝
- java中的数组拷贝
- JAVA二维数组拷贝
- Java 数组的拷贝
- Java数组拷贝
- JAVA 数组拷贝
- Java数组拷贝
- Java拷贝数组
- Java 数组拷贝
- Java核心技术--数组拷贝
- JAVA数组的拷贝
- JAVA之数组拷贝
- Java 数组 浅拷贝与深拷贝
- Java 数组 浅拷贝与深拷贝
- MD5加密算法
- DOS中del和rd的区别
- 机器学习笔记1绪论----教材周志华西瓜书
- 如何分辨设备并判断机型???
- 新手上路之List,HashMap遍历二(1对多) 笔记总结
- Java 数组拷贝
- 动态顺序表C++实现
- 2018小红书笔试题第一题
- 07:矩阵归零消减序列和
- 如何写好科研论文的摘要
- 洛谷 P2002 消息扩散
- CSDN转载博客的方法
- luogu1202 [USACO1.1]黑色星期五Friday the Thirteenth
- Python3 -美女图片 爬虫 (二)