码迷,mamicode.com
首页 > 编程语言 > 详细

java语言复制数组的四种方法

时间:2017-10-14 17:10:48      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:segment   bbs   track   url   生态   网络技术   statement   大数据   []   

参考: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循环

代码灵活,但效率低

 

4、Arrays.copyOf 的用法:

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

 



 
10
1
 

 

 
查看评论
2楼 qq_26222859 2016-09-29 16:46发表 [回复]
技术分享
跟楼主一起加油,本人也是应届毕业生
1楼 于亦儿 2016-09-09 18:08发表 [回复]
技术分享
你也在找工作吗
Re: 亭之翼 2016-09-12 10:08发表 [回复]
技术分享
回复于亦儿:是的呢,应届毕业生
 
发表评论
  • 用 户 名:
  • qq_36615307
  • 评论内容:
  • 技术分享
      
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
 
 
 
 
    个人资料
 
技术分享
    • 访问:166449次
    • 积分:3332
    • 等级: 技术分享
    • 排名:第10764名
    • 原创:171篇
    • 转载:15篇
    • 译文:0篇
    • 评论:11条
    博客专栏
技术分享 华为OJ——java笔试题汇总

文章:61篇

阅读:37398
    文章存档
    最新评论
 
 
 

java语言复制数组的四种方法

标签:segment   bbs   track   url   生态   网络技术   statement   大数据   []   

原文地址:http://www.cnblogs.com/qiong2017/p/7667425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!