zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C#快速随机按行读取大型文本文件
    OpenReadWithHttps
    fiddler不能监听 localhost和 127.0.0.1的问题 .
    C#放缩、截取、合并图片并生成高质量新图的类
    JS判断只能是数字和小数点
    HTML5 Support In Visual Studio 2010
    GridView 获取列字段的几种途径
    微信朋友圈如何同时分享(图片+文字) Android版
    【Android】 PopupWindow使用小结
    Android 第三方应用接入微信平台(2)
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3575954.html
Copyright © 2011-2022 走看看