zoukankan      html  css  js  c++  java
  • java语言复制数组的四种方法

    参考:http://www.cnblogs.com/dream-it-possible/p/7018804.html

    来源于牛客网的一道选择题:

    JAVA语言的下面几种数组复制方法中,哪个效率最高?

    A.for循环逐一复制
    B.System.arraycopy
    C.System.copyof
    D.使用clone方法

    效率:System.arraycopy > clone > Arrays.copyOf > for循环

    1、System.arraycopy的用法:

    其为native方法,即原生态方法,关键字native说明它不是用java语言写的,而是调用其他语言的代码,因此效率最高

    1. public static void native arraycopy(Object src,  
    2.                                        int srcPos,  
    3.                                             Object dest,  
    4.                                             int destPos,  
    5.                                             int length)  

      参数:    src - 源数组。

          srcPos - 源数组中的起始位置。

          dest - 目标数组。

          destPos - 目标数据中的起始位置。

          length - 要复制的数组元素的数量

    2、clone 的用法

    Object.clone
    从源码来看同样也是native方法,所以也是底层的C语言实现的,但返回为Object类型,所以赋值时将发生强转,所以效率不如1
     
    protected native Object clone() throws CloneNotSupportedException;
     
    例:
    class Aby implements Cloneable{
        public int i;
        public Aby(int i) {
            this.i = i;
        }
        @Override
        public Object clone() throws CloneNotSupportedException {
            // TODO Auto-generated method stub
            return super.clone();
        }
    }

    public class Solution {

        public static void main(String[] args) throws CloneNotSupportedException {
            Aby aby1 = new Aby(1);
            Aby aby2 = (Aby) aby1.clone();
            aby1.i = 2;
            System.out.println(aby1.i); //2
            System.out.println(aby2.i); //1

            Aby[] arr = {aby1,aby2};

            Aby[] arr2 = arr.clone();
            arr2[0].i = 3;
            System.out.println(arr[0].i);   //3
            System.out.println(arr2[0].i);  //3
        }
    }
     

    3、Arrays.copyOf 的用法:

    有十种重载方法,复制指定的数组,返回原数组的副本。具体可以查看jdk api

     

    java.util.Arrays.Arrays.copyOf(源数组,新数组长度);

    java.util.Arrays.copyOfRange(源数组,开始拷贝位置,结束拷贝位置);

     

     

    它的源代码

    + View code

    public static int[] copyOf(int[] original, int newLength) {

      int[] copy = new int[newLength];

      System.arraycopy(original, 0, copy, 0,

        Math.min(original.length, newLength));

      return copy;

    }

    实际上它调用的就是System.arraycopy。

     

    4、for循环

    代码灵活,但效率低公司简介

     
  • 相关阅读:
    BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法
    BZOJ_2693_jzptab_莫比乌斯反演
    BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS
    BZOJ_5301_[Cqoi2018]异或序列&&CF617E_莫队
    前端开发框架对比
    现在企业流行的java框架技术
    尼古拉斯·沃斯
    算法和流程图
    Java中DAO的实现
    java中的DAO设计模式
  • 原文地址:https://www.cnblogs.com/qiong2017/p/7667425.html
Copyright © 2011-2022 走看看