复制和克隆数组,实现数组空间自动增长
转贴来自: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
异常。
复制和克隆数组,实现数组空间自动增长相关推荐
- Oracle设置表空间自动增长
注意:先进行这些操作,再创建用户和表 – 先查询一波现有的表空间以及大小以及DBF位置以及是否自动增长 select tablespace_name,file_name,autoextensible ...
- 表空间自动增长,导致磁盘空间不足,给数据库表空间瘦身
有时管理员图方便,给业务表空间设置自动增长空间的权限,在管理员疏忽的情况下,表空间会长满,导致磁盘空间紧张,为了给磁盘瘦身,就测试如下想法是否可行 搭建环境 oracle10g windows2003 ...
- oracle创建表空间 扩展表空间文件 修改表空间自动增长
1. 创建表空间 create tablespace SIRM2 datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 10 ...
- oracle表空间默认增长大小,Oracle 用户表空间查看、修改大小、设置自增长等
分类: Oracle 首先登入某个用户,查看某个用户在哪个表空间下: select username,default_tablespace from user_users; 查看该用户下所有的表: s ...
- oracle取消表空间自增长,oracle_创建表空间_临时表空间_修改表空间_以及自增长...
管理员用户登录oracle数据库 [oracle@DBORACLE ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on ...
- arrays中copyof复制两个数组_数组,及二维数组
1.1 命令行参数(C) 在程序运行过程中,可以向应用程序传递一些参数,这些参数称为命名行参数. public 命令行参数以字符串的形式传入args数组中.可以一次传递0-多个参数,以空格分割. 如果 ...
- C语言:初识数组及数组的复制
什么是数组?数组是由相同类型(记住是相同,不同类型不可以)的一系列数据组成.基本上C语言变量可用的类型,在数组也可使用. 数组的语法如下: 类型 数组标识[长度] ,其中数组的长度或元素个数用方括号括 ...
- numpy的基本使用 附python代码详细讲解(numpy函数,创建数组,常用属性,索引切片,数组的复制,修改维度,数组的分割、拼接、转置)
目录 使用array创建数组 使用arange创建数组 Numpy中的随机数创建 ndarray对象的常用属性 其他方式创建数组 索引和切片(一位数组.二维数组) 数组的复制 修改数组的维度 数组的拼 ...
- Java三维数组深度复制,JavaScript —— 如何深浅拷贝数组
这两天遇到了一个问题,如何复制数组,所以就从各个地方找了很多的解决办法.算是整理一下,这样以便于自己以后的学习: 目录 浅拷贝数组 深拷贝数组 1.使用数组遍历赋值 原理 代码实现 2.返回新数组方法 ...
最新文章
- nginx日记分割脚本
- 从“小”培养AI安全意识:OpenAI开源具有安全约束的RL训练工具
- Dz0724补丁补掉的一个xss+补掉的另外一个xss
- Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
- android phone驱动_一文带你掌握 Android 系统架构
- hdu 4358(莫队算法+dfs序列)
- Arduino从DHT11读取温湿度数据并显示在1602LCD
- directx最终用户运行时_WSL将支持GPU计算,并可运行Linux GUI应用
- Windbg 离线调试.Net 程序入门
- java mat转csv_MATLAB数据保存成其他格式文件(.csv .xlsx .txt等)通用函数[faruto版本]
- PS中的Workflow的创建
- win10计算机管理看不见蓝牙,win10系统蓝牙不见了的解决方法
- 微型计算机系统与接口流水灯,单片机的LED流水灯系统设计2.doc
- 网站定时监控平台有哪些 7款好用的实时监控网站工具
- 计算机专业问卷调查,大学生计算机专业调查问卷.doc
- std::future、std::promise、std::packaged_task、std::async
- 校园6美女向一男生表白 史上最强表白阵容来袭
- 安装centos6.5没有网,右上角也没有网络图标
- QuasarRAT-windows下远程控制工具
- 迈向企业开发Spring详解!
热门文章
- 设计一个高性能三维渲染服务器,第一人称视角三维实景漫游系统渲染流水线架构研究.pdf...
- 【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码
- c 只获取程序名_UG NX后处理出EXCEL程序单的解决方案
- 直播新风向 | 云上的专业导播台,让直播更轻松、更便捷
- 中级java笔试题_Java中级面试题合集
- java 获取ip地址
- hackthebox-01startpoint-TIER2-Base
- 博图region用法_TIA博途软件-STEP 编程指南
- java excel 逐行读取_java利用poi读取Excel文件
- shell 免杀aspx_asp免杀webshell木马总结