登录  /  注册
首页 > Java > Java入门 > 正文

java如何复制数组

王林
发布: 2020-10-19 16:52:37
转载
2506人浏览过

java如何复制数组

1、数组长度相等

假设nums和nums1是长度相等的两个数组。

(推荐教程:java课程

1.1、用nums = nums1;

赋值前

0bf2da50138895ee693442ec2ff1204.png

赋值后

1200d32e2266accf145f17f8ec30691.png

nums创建的时候在堆里面创建一块内存区域用来存储,nums指向这个内存地址A。nums1创建后指向B。

现在令nums = nums1;则把num1的地址(或者说是引用)赋给了num,所以num也指向了B。两个数组都指向堆中同一个内存区域,他们是共享里面的数据。

1.2、for循环

        for (int i = 0; i < nums1.length; i++){
            nums[i] = nums1[i];
        }
登录后复制

循环前

3f0b11be834c8ca3623a5314b766d98.png

循环后

460fe751da26f108b0d5fd2781c6ddc.png

成功改变nums数组内部内容,而没有改变其引用。

1.3、Arrays类

方法1:复制指定数组至指定长度

nums = Arrays.copyOf(nums1,5);
登录后复制

方法2:复制指定数组的指定长度

nums = Arrays.copyOfRange(nums1,0,5);
登录后复制

两种方法最后的索引都可以>数组的长度,然后后面的都会补上0。

两种方法都可以成功复制数组,而且我们发现原数组nums从524变成了526,说明这两种复制方法是创建了一个新数组,然后用等号左边的数组指向这个新数组。

dcafaf6c94390daec6292f0c35ca612.png

1.4、System.arraycopy方法

System.arraycopy(originalArray, 0, targetArray, 0, originalArray.length);
登录后复制

d25e6c21ed5dd3ca4f6023ffdd4d030.png

可以看出这个方法类似于我们的for循环,是直接改原来数组的内容,没有改引用。

2、数组长度不等

赋值法成功for循环要注意越界问题,会报java.lang.ArrayIndexOutOfBoundsExceptionArrays类法成功注意越界问题,会报java.lang.ArrayIndexOutOfBoundsException

其他:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

   //思路:设置一个index,表示非0数的个数,循环遍历数组,
    // 如果不是0,将非0值移动到第index位置,然后index + 1
    //遍历结束之后,index值表示为非0的个数,再次遍历,从index位置后的位置此时都应该为0
    public void moveZeroes(int[] nums) {
        if (nums == null || nums.length <= 1) {
            return;
        }
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                nums[index] = nums[i];
                index++;
            }
        }

        for (int i = index; i < nums.length; i++) {
            nums[i] = 0;
        }
    }
登录后复制

相关推荐:java入门

以上就是java如何复制数组的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:csdn网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号