转贴来自:http://www.ibm.com/developerworks/cn/java/j-arrays/#3

复制和克隆数组

使用数组可以做很多事。如果数组的初始大小已无法满足您的需要,您就需要创建一个新的更大的数组,然后将原始元素复制到更大数组的相同位置。但是,如果您不需要将数组变大,而只希望在使原始数组保持原样的基础上修改数组元素,您必须创建数组的一个副本或克隆版本。

System 类中的 arraycopy() 方法允许您将元素从一个数组复制到另一个数组。当进行这种复制时,目标数组可以大些;但如果目标数组比源数组小,就会在运行时抛出一个 ArrayIndexOutOfBoundsException 异常。 arraycopy() 方法用到 5 个参数(两个用于数组,两个用作数组的起始位置,还有一个表示复制元素的数量): public static void arraycopy (Object sourceArray,int sourceOffset,Object destinationArray,int destinationOffset,int numberOfElementsToCopy) 。 除了类型的兼容性,这里唯一的必要条件是已经为目标数组分配了内存。

警告:当在不同的数组之间复制元素时,如果源参数或目标参数不是数组,或者它们的类型不兼容,就会抛出 ArrayStoreException 异常。不兼容的数组比如一个是基本数据类型数组而另一个是对象数组;或基本数据类型不同;或对象类型不可赋值。

为了演示,清单 2-2 采用一个整型数组并创建一个两倍大的新数组。下面示例中的 doubleArray() 方法为我们做到了这一点:

清单 2-2. 将数组大小加倍

public class DoubleArray {
public static void main (String args ]) {
int array1[] = {1, 2, 3, 4, 5};
int array2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println("Original size: " + array1.length);
System.out.println("New size: " + doubleArray(array1).length);
System.out.println("Original size: " + array2.length);
System.out.println("New size: " + doubleArray(array2).length);
}
static int[] doubleArray(int original[]) {
int length = original.length;
int newArray[] = new int[length*2];
System.arraycopy(original, 0, newArray, 0, length);
return newArray;
}
}

在获得源数组的长度以后,先创建适当大小的新数组,再把原始元素复制到新数组中相同的位置。在您了解数组的反射以后,您可以总结出将任意类型数组的大小加倍的方法。

执行程序,生成如下输出:

Original size: 5
New size: 10
Original size: 9
New size: 18

注意:当用 arraycopy() 进行复制时,如果您要将数组的子集复制到该数组内的另一个区域,源数组和目标数组可以是同一个。即使有些地方发生重叠也会生效。

因为数组实现了 Cloneable 接口,除了复制数组的区域以外,还可以克隆它们。 克隆包括创建一个同样大小和类型的数组,并将所有的原始元素复制到新数组里。这和复制不同,复制要求您自己创建目标数组并限定其大小。对基本数据类型的元素来说,新数组包含原始元素的副本,所以一个数组中元素的变化不会反映到它的副本中。但对于对象引用的情况,复制的只是引用。因而,数组的两个副本将指向同一个对象。对该对象的更改将反映到两个数组中。这叫做 浅拷贝或者 浅克隆

为了演示,下面的方法采用了一个整型数组并返回上述数组的一个副本。

static int[] cloneArray(int original[]) {
return (int[])original.clone();
}

数组克隆用一个实际起作用的 public 方法覆盖了被保护起来的 Object 方法,后者通常会抛出 CloneNotSupportedException 异常。

复制和克隆数组,实现数组空间自动增长相关推荐

  1. Oracle设置表空间自动增长

    注意:先进行这些操作,再创建用户和表 – 先查询一波现有的表空间以及大小以及DBF位置以及是否自动增长 select tablespace_name,file_name,autoextensible ...

  2. 表空间自动增长,导致磁盘空间不足,给数据库表空间瘦身

    有时管理员图方便,给业务表空间设置自动增长空间的权限,在管理员疏忽的情况下,表空间会长满,导致磁盘空间紧张,为了给磁盘瘦身,就测试如下想法是否可行 搭建环境 oracle10g windows2003 ...

  3. oracle创建表空间 扩展表空间文件 修改表空间自动增长

    1. 创建表空间 create tablespace SIRM2  datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 10 ...

  4. oracle表空间默认增长大小,Oracle 用户表空间查看、修改大小、设置自增长等

    分类: Oracle 首先登入某个用户,查看某个用户在哪个表空间下: select username,default_tablespace from user_users; 查看该用户下所有的表: s ...

  5. oracle取消表空间自增长,oracle_创建表空间_临时表空间_修改表空间_以及自增长...

    管理员用户登录oracle数据库 [oracle@DBORACLE ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on ...

  6. arrays中copyof复制两个数组_数组,及二维数组

    1.1 命令行参数(C) 在程序运行过程中,可以向应用程序传递一些参数,这些参数称为命名行参数. public 命令行参数以字符串的形式传入args数组中.可以一次传递0-多个参数,以空格分割. 如果 ...

  7. C语言:初识数组及数组的复制

    什么是数组?数组是由相同类型(记住是相同,不同类型不可以)的一系列数据组成.基本上C语言变量可用的类型,在数组也可使用. 数组的语法如下: 类型 数组标识[长度] ,其中数组的长度或元素个数用方括号括 ...

  8. numpy的基本使用 附python代码详细讲解(numpy函数,创建数组,常用属性,索引切片,数组的复制,修改维度,数组的分割、拼接、转置)

    目录 使用array创建数组 使用arange创建数组 Numpy中的随机数创建 ndarray对象的常用属性 其他方式创建数组 索引和切片(一位数组.二维数组) 数组的复制 修改数组的维度 数组的拼 ...

  9. Java三维数组深度复制,JavaScript —— 如何深浅拷贝数组

    这两天遇到了一个问题,如何复制数组,所以就从各个地方找了很多的解决办法.算是整理一下,这样以便于自己以后的学习: 目录 浅拷贝数组 深拷贝数组 1.使用数组遍历赋值 原理 代码实现 2.返回新数组方法 ...

最新文章

  1. nginx日记分割脚本
  2. 从“小”培养AI安全意识:OpenAI开源具有安全约束的RL训练工具
  3. Dz0724补丁补掉的一个xss+补掉的另外一个xss
  4. Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
  5. android phone驱动_一文带你掌握 Android 系统架构
  6. hdu 4358(莫队算法+dfs序列)
  7. Arduino从DHT11读取温湿度数据并显示在1602LCD
  8. directx最终用户运行时_WSL将支持GPU计算,并可运行Linux GUI应用
  9. Windbg 离线调试.Net 程序入门
  10. java mat转csv_MATLAB数据保存成其他格式文件(.csv .xlsx .txt等)通用函数[faruto版本]
  11. PS中的Workflow的创建
  12. win10计算机管理看不见蓝牙,win10系统蓝牙不见了的解决方法
  13. 微型计算机系统与接口流水灯,单片机的LED流水灯系统设计2.doc
  14. 网站定时监控平台有哪些 7款好用的实时监控网站工具
  15. 计算机专业问卷调查,大学生计算机专业调查问卷.doc
  16. std::future、std::promise、std::packaged_task、std::async
  17. 校园6美女向一男生表白 史上最强表白阵容来袭
  18. 安装centos6.5没有网,右上角也没有网络图标
  19. QuasarRAT-windows下远程控制工具
  20. 迈向企业开发Spring详解!

热门文章

  1. 设计一个高性能三维渲染服务器,第一人称视角三维实景漫游系统渲染流水线架构研究.pdf...
  2. 【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码
  3. c 只获取程序名_UG NX后处理出EXCEL程序单的解决方案
  4. 直播新风向 | 云上的专业导播台,让直播更轻松、更便捷
  5. 中级java笔试题_Java中级面试题合集
  6. java 获取ip地址
  7. hackthebox-01startpoint-TIER2-Base
  8. 博图region用法_TIA博途软件-STEP 编程指南
  9. java excel 逐行读取_java利用poi读取Excel文件
  10. shell 免杀aspx_asp免杀webshell木马总结