【编程基础】System.arraycopy()和 Arrays.copyOf()

在Java中如果要copy一个数组有两种系统api可以使用System.arraycopy()和Arrays.copyOf()。那么这两个方法有什么不同吗?下面一个例子来给大家展示一下:

1、System.arraycopy()

int[] arr = {1,2,3,4,5};
int[] copied = new int[10];
System.arraycopy(arr, 0, copied, 1, 5);//5 is the length to copy
System.out.println(Arrays.toString(copied));

Output:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 2, 3, 4, 5, 0, 0, 0, 0]

2、Arrays.copyOf()

int[] copied = Arrays.copyOf(arr, 10); //10 the the length of the new arraySystem.out.println(Arrays.toString(copied)); copied = Arrays.copyOf(arr, 3);System.out.println(Arrays.toString(copied));

Output:

[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
[1, 2, 3]

两种方法的不同之处在于Arrays.copyOf是通过创建一个新的数组来实现的copy,源码如下:

int[] copied = Arrays.copyOf(arr, 10); //10 the the length of the new array
System.out.println(Arrays.toString(copied)); 
copied = Arrays.copyOf(arr, 3);
System.out.println(Arrays.toString(copied));

System.arraycopy()是往一个已经存在的数组copy,函数源码如下:

public static native void arraycopy(Object src, int srcPos,

Object dest, int destPos,

int length);

src - 源数组。 srcPos - 源数组中的起始位置。 dest - 目标数组。 destPos - 目标数据中的起始位置。 length - 要复制的数组元素的数量。 该方法是用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。

总结: 1.copyOf()的实现是用的是arrayCopy()。 2.arrayCopy()需要目标数组,对两个数组的内容进行可能不完全的合并操作。 3.copyOf()在内部新建一个数组,是用arrayCopy()将oldArray内容复制到newArray中去,并且长度为newLength,返回newArray。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

第十六天 常用API-Date&DateFormat&Calender&System&Math&基本类型包装类&正则【悟空教程】

第十六天 常用API-Date&DateFormat&Calender&System&Math&基本类型包装类&简单正则表达式【悟空教程】

952
来自专栏大闲人柴毛毛

剑指 offer代码解析——面试题37两个链表的第一个公共结点

本题的详细解析均在代码注释中: import java.util.Stack; /** * 题目:输入两个链表,找出他们的第一个公共结点 * @autho...

3095
来自专栏从零开始学 Web 前端

07 - JavaSE之容器

Collection 接口的子接口分为:Set接口(包含 HashSet类) + List接口(包含LinkedList 类和 ArrayLis t类) Ma...

912
来自专栏机器学习从入门到成神

Java使用增强for循环和迭代器遍历Map集合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

2091
来自专栏计算机视觉与深度学习基础

java在acm中大数运算教程

import java.io.*; import java.util.*; public class Main { public static void ...

2029
来自专栏Java技术分享圈

Java集合之map 集合使用

682
来自专栏Bingo的深度学习杂货店

Q35 Search Insert Position

Given a sorted array and a target value, return the index if the target is found...

2797
来自专栏LinkedBear的个人空间

唠唠SE的集合-01——Collection接口

当集合中存储的对象类型不同时,那么会导致程序在运行的时候的转型异常,所以jdk1.5加入了泛型机制。

612
来自专栏电光石火

HashSet集合中hashCode及equals方法详解

首先我们熟知HashSet集合中元素存储的特点: 1)不允许元素重复; 2)不会记录元素添加的先后顺序; 3)HashSet中比较两个对象是否相同...

1769
来自专栏Java爬坑系列

【Java入门提高篇】Day20 Java集合类详解(三)List接口

  今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collectio...

2197

扫码关注云+社区