|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
好吧,这也是我的一个学习笔记,我也是菜鸟,欢迎一起交流 , ! 拜拜
|
评分
-
查看全部评分
|