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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HP Loadrunner 11 安装+激活成功教程+汉化+乱码

    HP Loadrunner 11 安装+激活成功教程+汉化+乱码一、激活成功教程HPLoadrunner+汉化1、在HP官网上注册(必须要注册才能下载)2、下载LoadRunner11安装包  下载地址:http://www8.hp.com/cn/zh/software-solutions/software.html?compURI=1175451#-HPCDC-trackGatedLink=TrialSoftware|3-3KSG8SS|T

    2022年7月22日
    17
  • 测试用例设计——等价类划分法「建议收藏」

    测试用例设计——等价类划分法「建议收藏」一、分析问题如果我们需要对下面的这个两位数加法器设计测试用例,在测试了1+1,1+2,(-1)+1和(-1)+2之后,是否有必要测试1+3,1+4,1+(-3)和1+(-4)呢?如果不对两位数加法器程序进行穷举测试,我们能否放心的认为其他所有的参数组合都是正确的呢?可想而知,我们不可能输入这么多的组合进行测试。那么,如果不可能输入这些组合进行测试,是否会担心会遗漏测试中会存在bug呢?…

    2022年10月18日
    2
  • pycharm怎么初始化设置_pycharm安装之后的设置

    pycharm怎么初始化设置_pycharm安装之后的设置pycharm的初始设置恢复pycharmpycharm的配置信息是保存在用户目录下.PyCharm***.*目录下的,***.*表示当前使用的pycharm的版本号如果要回复pycharm的初始设置,可以按照以下步骤进行 关闭正在运行的pycharm 删除pycharm的配置信息目录 rm-r~/.PyCharm16.3 重新启动pycharm(选择没有配置信息选项 ) 选择许可协议新建/打开一个pychar

    2022年8月27日
    1
  • C++11新特性之nullptr

    C++11新特性之nullptrC 11 新特性之 nullptr

    2025年7月12日
    1
  • arping常见用法

    arping常见用法阅读本文大概需要2分钟。功能:查看本LAN内IP对应的主机MAC地址,以及MAC的占用问题。有两个版本:ThomasHabets版和Linuxi…

    2022年6月3日
    40
  • linux虚拟机设置固定IP

    linux虚拟机设置固定IPlinux虚拟机设置固定IPubuntu虚拟机(桥接模式)设置固定IP方法很简单,直接在系统设置里面配置就可以了1.先使用ifconfig查看掩码2.点击设置3.点击network再点击set4.第一个为虚拟机ip,为避免冲突,建议设置210以上的ip5.重启,ifconfig查看ip不同版本系统界面可能不同,但操作类似…

    2022年7月16日
    9

发表回复

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

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