java 二维数组 arraycopy_Java对数组的复制[通俗易懂]

java 二维数组 arraycopy_Java对数组的复制[通俗易懂]定义一个数组int[]a={3,1,4,2,5};int[]b=a;数组b只是对数组a的又一个引用,即浅拷贝。如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopyint[]a={3,1,4,2,5};int[]b=a.clone();b[0]=10;System.out.println(b[0]+””+a[0…

大家好,又见面了,我是你们的朋友全栈君。

定义一个数组int[] a={3,1,4,2,5}; int[] b=a;  数组b只是对数组a的又一个引用,即浅拷贝。

如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopy

int[] a={3,1,4,2,5};int[] b=a.clone();b[0]=10;System.out.println(b[0]+”  “+a[0]);但是clone和System.arrayCopy都是对一维数组的深度复制。

对于二维数组则不一样:int[][] a={
{3,1,4,2,5},{4,2}};int[][] b=a.clone();b[0][0]=10;System.out.println(b[0][0]+”  “+a[0][0]);输出为10  10所以clone并不能直接作用于二维数组。

因为java中没有二维数组的概念,只有数组的数组。所以二维数组a中存储的实际上是两个一维数组的引用。当调用clone函数时,是对这两个引用进行了复制。

要证明,只需看下面的输出int[][] a={
{3,1,4,2,5},{4,2}};int[][] b=a.clone();b[0][0]=10;System.out.println(b[0][0]+”  “+a[0][0]);System.out.println(a[0]==b[0]);第5句输出为true.用clone对二维数组进行复制,要在每一维上调用clone函数

int[][] a={
{3,1,4,2,5},{4,2}};int[][] b=new int[a.length][];for(int i=0;i

小结:

数组的复制方法现在至少有四个思路:

1 使用循环结构 这种方法最灵活。唯一不足的地方可能就是代码较多

2 使用Object类的clone()方法, 这种方法最简单,得到原数组的一个副本。灵活形也最差。效率最差,尤其是在数组元素很大或者复制对象数组时。

3 使用Systems的arraycopy这种方法被告之速度最快,并且灵活性也较好,可以指定原数组名称、以及元素的开始位置、复制的元素的个数,目标数组名称、目标数组的位置。

4 Arrarys类的copyOf()方法与copyOfRange()方法可实现对数组的复制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156737.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据流量分析[通俗易懂]

    大数据流量分析[通俗易懂]数据分析工具:FineBI商业智能工具http://www.finebi.com/数据分析的本质其实是做数据对比分析,没有数据对比,单一的指标统计往往难以发挥数据价值。像我们常见的数据对比分析方法有同比、环比、占比等一系列分析指标,那是不是所有的数据业务场景都可以直接进行套用分析呢?比如我们统计企业2018年1月29日的同比流量,是不是可以直接对比2017年1月29日?表面上看好像2017年1…

    2022年4月28日
  • mysql 隐式类型转换_date_range函数

    mysql 隐式类型转换_date_range函数一、如果表定义的是varchar字段,传入的是数字,则会发生隐式转换。1、表DDL2、传int的sql3、传字符串的sql仔细看下表结构,rid的字段类型:而用户传入的是int,这里会有一个隐式转换的问题,隐式转换会导致全表扫描。把输入改成字符串类型,执行计划如下,这样就会很快了。此外,还需要注意的是:数字类型的0001等价于1字符串的0001和1不等价二、如果表定义的是int字段,传入的是字符串…

    2022年10月11日
  • 达梦数据库同步部署方案「建议收藏」

    达梦数据库同步部署方案「建议收藏」达梦数据复制(DATAREPLICATION)是一个分担系统访问压力、加快异地访问响应速度、提高数据可靠性的解决方案。将一个服务器实例上的数据变更复制到另外的服务器实例。可以用于解决大、中型应用中出现的因来自不同地域、不同部门、不同类型的数据访问请求导致数据库服务器超负荷运行、网络阻塞、远程用户的数据响应迟缓的问题。

    2022年10月15日
  • ghost备份与还原系统教程 如何备份系统_重装系统如何备份

    ghost备份与还原系统教程 如何备份系统_重装系统如何备份备份系统完成操作系统、驱动程序或所需软件的安装后,可以利用Ghost工具将系统分区“复制”到一个镜像文件中,在系统出现问题时再将镜像文件还原到系统盘即可,还原时所需的时间也只有10分钟左右,既方便又快捷。使用Ghost备份系统的具体操作方法如下:第1步:双击程序图标,使用U盘启动盘进入PE系统,在桌面上双击“GHOST克隆”图标。第2步:单击OK按钮,启动SymantecGhost程序,此时将弹出提示信息框,单击OK按钮。第3步:单击ToIlmage命令,单

    2022年9月4日
  • gradle 打包命令(怎么在mac终端输入命令)

    Gradle终端命令给App打包估计好多兄弟们都习惯了用AndroidStudio和Eclipse的build直接对app进行打包,突然有一天领导让用Gradle打包,就措手不及了,我为大家附上方法:首先,需要有一个本地的Gradle,在此我附上网址,是我自己传到网盘上的,所以不是最新的,不影响使用gradle-2.4-all链接:http://pan.baidu.com/s/1nvRcDV7密

    2022年4月15日
  • Apache规则RewriteCond详解

    Apache规则RewriteCond详解
    Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了。 RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。
      RewriteEngineon
      RewriteCond %{HTTP_USER_AGENT

    2022年6月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号