• JAVA 数组复制


    先看一道题:

    Java代码 复制代码 收藏代码
    1. public static void main(String[] args) {
    2. int[] a = { 1, 2, 3, 4, 5 };
    3. int[] b = new int[10];
    4. for (int i : b) {
    5. b[i] = 0;
    6. }
    7. System.arraycopy(a, 0, b, 0, 5);
    8. for (int i : b) {
    9. System.out.print(b[i]);
    10. }
    11. }

    猜猜应该打印什么?

    答案:2345011111

    数组复制:

    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://xiaooman07.iteye.com/blog/451843

  • 相关阅读:
    CentOS、Ubuntu、Debian三个linux比较异同
    中国版 Ubuntu Kylin 14.04 LTS 麒麟操作系统中文版发布下载 (Ubuntu天朝定制版)
    keras之save & reload model
    2.keras实现-->深度学习用于文本和序列
    迭代器 、生成器、可迭代对象
    numpy 中clip函数的使用
    1.keras实现-->自己训练卷积模型实现猫狗二分类(CNN)
    1.keras实现-->使用预训练的卷积神经网络(VGG16)
    L1正则化和L2正则化
    keras搭建深度学习模型的一些小tips
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3575954.html
Copyright © 2020-2023  润新知