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

  • 相关阅读:
    SublimeText3下的Python开发环境配置
    从Evernote迁移到Wiz
    读书笔记---《即学即用财务常识120例》
    MC700 安装双系统
    Python3.5 + django1.8.5 安装”import pymysql pymysql.install_as_MySQLdb()”的解决方法
    7z压缩文件时排除指定的文件
    安装.NET Framework后程序无法启动的错误处理
    重拾Blog
    X240s安装Win7 以及如何启用ExpressCache
    新玩具---Amazon Kindle PaperWhite 2
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3575954.html
Copyright © 2011-2022 走看看