java 提供的System.arrayCopy()方法比自己写的数组copy要快.
查看其源代码:
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
可以看到被定义为native方法...速度比自己写的普通方法要快.
在jdk1.6中加入了新的数组拷贝方法.Arrays.copyOfRange().
其源代码:
public static byte[] copyOfRange(byte[] original, int from, int to) {
int newLength = to - from;
if (newLength < 0)
throw new IllegalArgumentException(from + " > " + to);
byte[] copy = new byte[newLength];
System.arraycopy(original, from, copy, 0,
Math.min(original.length - from, newLength));
return copy;
}
其实就是System.arraycopy..晕死.
别为做的测试:
/*******************************************************************************
*
* 比较赋值与System.arraycopy谁快
*
* 复制的内容越多,System.arraycopy优势更明显
*
* Author: NeedJava
*
* Modified: 2007.09.16
*
******************************************************************************/
public final class WhoFaster
{
public static void main( String[] args )
{
/*/
int begin=100;
int length=12;
String temp="12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"黑客帝国忍者神龟变形金刚"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890";
int times=10000000; //千万
/*/
int begin=100;
int length=120;
String temp="12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"黑客帝国忍者神龟变形金刚"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890"
+"12345678901234567890";
int times=1000000; //百万
//*/
char[] oldArray=temp.toCharArray();
char[] newArray=null;
long start=0L;
////////////////////////////////////////////////////////////////////////////
//
// 单纯赋值
//
////////////////////////////////////////////////////////////////////////////
newArray=new char[length];
start=System.currentTimeMillis();
for( int i=0; i<times; i++ )
{
for( int j=0; j<length; j++ )
{
newArray[j]=oldArray[begin+j];
}
}
System.out.println( new String( newArray )+" "+( System.currentTimeMillis()-start ) );
////////////////////////////////////////////////////////////////////////////
//
// System.arraycopy
//
////////////////////////////////////////////////////////////////////////////
newArray=new char[length];
start=System.currentTimeMillis();
for( int i=0; i<times; i++ )
{
System.arraycopy( oldArray, begin, newArray, 0, length );
}
System.out.println( new String( newArray )+" "+( System.currentTimeMillis()-start ) );
}
}
其结论:
在第一种情况,循环千万,一个900,一个1000,两者相差100毫秒
第二种情况就拉大了,循环千万,一个6700,一个2200,相差4500毫秒
为防止JVM将字符数组作为常量保存在内存中,我分别屏蔽运行,效果一样。
也就是说,对于很短的字符串复制,单纯赋值略快,可以忽略
对于很长的字符串复制,用单纯赋值就是脏代码
转自:http://luoyahu.iteye.com/blog/365465
分享到:
相关推荐
2. 深拷贝与浅拷贝:数组拷贝有深拷贝(复制整个数组及其中的元素)和浅拷贝(只复制数组引用)之分,使用`System.arraycopy()`方法可以实现深拷贝。 3. 排序:Java的`Arrays`类提供了对数组进行排序的方法,如`...
Java数组是程序设计中不可或缺的基础概念,它是一种数据结构,允许我们存储同类型的多个元素。在Java中,数组是对象,具有固定的大小,一旦创建,其长度就不能改变。本篇文章将深入探讨Java数组的各个方面,包括创建...
数组拷贝可以通过赋值操作或者使用`System.arraycopy()`方法实现。赋值操作(如`bb = aa`)只会让两个数组引用指向同一块内存,而`System.arraycopy()`方法则会真正复制数组的内容到另一块内存。 在处理大量数据时...
Java数组拷贝方式及相关问题分析 Java编程中拷贝数组的方式有多种,主要可以分为四种方式:利用for循环、直接赋值、利用Arrays的copyof方法和System.arraycopy方法。 第一种方式:利用for循环 这是一种最基本的...
Java 数组复制的四种方法效率对比 Java 数组复制是 Java 编程中非常重要的一个操作,它可以将源数组的元素复制到目标数组中。今天,我们将讨论 Java 数组复制的四种方法,并比较它们的效率。 System.arraycopy ...
本文将深入探讨.NET 6中数组拷贝的性能对比,并将其与Java语言的相应操作进行比较。了解这些知识对于优化代码效率和提升应用程序性能至关重要。 首先,我们要知道在C#中,有几种不同的方法可以实现数组拷贝: 1. *...
"java数组资料"这个主题涵盖了Java基础知识的核心技术,特别是关于数组的知识。数组允许程序员在单个变量中存储一组相同类型的数据,这对于处理批量数据或者执行批量操作非常有用。 1. **数组的概念与定义** - ...
Java数组是编程基础中的核心概念,它是一种存储同类型数据集合的数据结构。在这个“java数组教学及练习”中,我们将深入探讨数组的本质、一维数组的使用、多维数组的概念,以及如何处理命令行参数和数组的操作,如...
2.将有10个元素的数组a1 拷贝至含有15个元素的数组b1的一段位置。 3.将一个已存入数组中的值45,89,7,6,0,按0,6,7,89,45的次序打印出来。 4. 求一个3*3矩阵对角线元素之和。 5.设某个一维数组中有25个...
Java数组是程序设计中基础且重要的数据结构,它允许存储同一类型的数据集合。在这个“Java数组使用视频教程”中,我们将深入理解数组的内存管理、元素的创建与使用。 首先,我们来探讨“一维数组内存分析”。在Java...
Java数组是Java编程语言中的基本概念,它是存储同类型元素集合的一种数据结构。在这个暑假培训学习笔记中,我们将深入理解Java数组的各个方面,包括定义、初始化、操作以及数组的高级特性。 1. **数组的定义** 在...
接下来,我们讨论数组拷贝。拷贝一个数组,尤其是大数组时,会涉及到两种主要策略:浅拷贝和深拷贝。浅拷贝仅仅复制了数组的引用,这意味着两个数组都指向同一块内存。因此,改变其中一个数组会影响到另一个。在C++...
在Java中,数组的复制分为浅拷贝和深拷贝两种。浅拷贝仅复制数组本身,不复制其元素,而深拷贝则会复制整个对象包括嵌套的对象。对于基本类型数组,复制过程就是简单的内存复制;对于引用类型数组,浅拷贝仅复制...
Java数组是Java编程语言中基本的数据结构之一,它允许存储同一类型的多个元素。在Java中,数组是一个对象,它包含固定大小的同类型元素序列。理解并熟练掌握数组的使用对于任何Java开发者来说都至关重要。 一、数组...
2.将有10个元素的数组a1 拷贝至含有15个元素的数组b1的一段位置。 3.将一个已存入数组中的值45,89,7,6,0,按0,6,7,89,45的次序打印出来。 4. 求一个3*3矩阵对角线元素之和。 5.设某个一维数组中有25个...
* 使用Array类的copyOf()方法将数组拷贝到一个新的数组中 这些知识点都是Java数组编程的基础知识,在实际开发中经常使用。 本资源涵盖了Java数组的逆序存放和输出、二分法插入数据到数组、计算二维数组对角线之和...
Java数组集合的深度复制代码实例 Java数组集合的深度复制代码实例是Java程序设计中的一种重要技术,它可以将数组或集合中的数据复制到另一个数组或集合中,从而实现数据的备份或传输。本文将通过示例代码详细介绍...
Java数组是程序设计中基础且重要的数据结构,用于存储同类型的数据集合。下面根据题目中的内容,详细解析Java数组的相关知识点: 1. 访问数组元素:数组的元素通过索引来访问,索引从0开始,例如`arr[0]`访问第一个...
在这个Java数组练习题中,涉及到了数组的多个重要知识点,包括数组的访问、复制、存储位置、异常处理以及初始化等方面。 1. **数组的访问**:数组的元素通过下标来访问,下标是从0开始的整数,例如`Array[0]`,`...
Java数组是编程基础中的核心概念,它是一种存储多个相同类型数据的集合。在这个Java数组练习题中,涉及到了数组的访问、复制、存储位置、排序、初始化、异常处理以及相关语法等多个知识点。 1. **数组的访问**:...