复制数组

本文介绍如何使用Java标准类库中的System.arraycopy()方法高效地复制数组,包括基本类型数组和对象数组,并提供了具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 标准类库提供有 static 方法 System.arraycopy(),用它复制数组比用 for 循环复制
要快很多。System.arraycopy()为所有类型作了重载。下面的例子就是用来处理 int 数组
的:


//: c11:CopyingArrays.java
// Using System.arraycopy()
import com.bruceeckel.simpletest.*; 
import com.bruceeckel.util.*; 
import java.util.*; 


public class CopyingArrays { 
private static Test monitor = new Test(); 
public static void main(String[] args) { 
int[] i = new int[7]; 
int[] j = new int[10]; 
    Arrays.fill(i, 47); 
    Arrays.fill(j, 99); 
    System.out.println("i = " + Arrays2.toString(i)); 
    System.out.println("j = " + Arrays2.toString(j)); 
    System.arraycopy(i, 0, j, 0, i.length);
    System.out.println("j = " + Arrays2.toString(j)); 
int[] k = new int[5]; 
    Arrays.fill(k, 103); 
    System.arraycopy(i, 0, k, 0, k.length);
    System.out.println("k = " + Arrays2.toString(k)); 
    Arrays.fill(k, 103); 
    System.arraycopy(k, 0, i, 0, k.length);
    System.out.println("i = " + Arrays2.toString(i)); 
// Objects:
    Integer[] u = new Integer[10]; 
    Integer[] v = new Integer[5];
    Arrays.fill(u, new Integer(47));
    Arrays.fill(v, new Integer(99));
    System.out.println("u = " + Arrays.asList(u)); 
    System.out.println("v = " + Arrays.asList(v)); 
    System.arraycopy(v, 0, u, u.length/2, v.length); 
    System.out.println("u = " + Arrays.asList(u)); 
    monitor.expect(new String[] { 
"i = [47, 47, 47, 47, 47, 47, 47]",
"j = [99, 99, 99, 99, 99, 99, 99, 99, 99, 99]",
"j = [47, 47, 47, 47, 47, 47, 47, 99, 99, 99]",
"k = [47, 47, 47, 47, 47]",
"i = [103, 103, 103, 103, 103, 47, 47]",
"u = [47, 47, 47, 47, 47, 47, 47, 47, 47, 47]",
"v = [99, 99, 99, 99, 99]",
"u = [47, 47, 47, 47, 47, 99, 99, 99, 99, 99]"
    });
  }
} ///:~
arraycopy()需要的参数有:源数组、表示从源数组中的什么位置开始复制的偏移量、表示
从目标数组的什么位置开始复制的偏移量、以及需要复制的元素个数。当然,对数组的任
何越界操作都会导致异常。


这个例子说明基本类型数组与对象数组都可以复制。然而,如果你复制对象数组,那么只

是复制了引用——不会出现两份对象的拷贝。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值