马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ston77 于 2017-1-10 17:30 编辑
--> 数组的克隆
对于一维数组的克隆一般而言有三种办法:
1.通过遍历源数组挨个取出然后存入目标数组
2.通过System.arraycopy(src, srcPos, dest, destPos, length)方法,其中
src 为源数组
srcPos 为源数组的起始位置
dest 为目标数组
destPos 没错,聪明如你,就是目标数组起始位置
length 为拷贝长度,如:
int [] src = new int[]{1,2,3,4,5};
int [] dest = new int[src.length];
System.arraycopy(src, 0, dest, 0, src.length);
bg6.png
3.呢就比较常用 即src.clone() 一行代码搞定 . 但是.......
对于二位数组 (再多就不考虑了,一样的道理 ) src.clone() 就有问题了, 什么问题? ...
int [] [] src = new int[][]{{1,2,3,4,5},{11,22,23,43,25},{131,222,23,43,325}};
int [] [] dest = src.clone();
clone() 方法是对基本类型 值 的克隆,为了更好的说明, 来两张图
使用克隆方法,得到的是这个结果:
所以再这样来一次:
for ( int i = 0; i < dest.length ; i ++ ) {
dest [i] = dest [i].clone();
}
就得到了下图:
--> 类的克隆
@Override
public Object clone(){
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(this);
byte [] arrayByte = out.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(arrayByte);
ObjectInputStream oin = new ObjectInputStream(in);
Object result = oin.readObject();
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
好吧,这也是我的一个学习笔记,我也是菜鸟,欢迎一起交流 , ! 拜拜
|