小编给大家分享一下java复制数组的案例,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
1,数组长度相等
假设num和nums1是长度相等的两个数组。
1.1,用num=nums1;
赋值前
赋值后
num创建的时候在堆里面创建一块内存区域用来存储,num指向这个内存地址A.nums1创建后指向b .
现在令num=nums1;则把num1的地址(或者说是引用)赋给了num,所以num也指向了b两个数组都指向堆中同一个内存区域,他们是共享里面的数据。
1.2,为循环
为(int i=0;我& lt;nums1.length;我+ +){ num[我]=nums1[我]; }
循环前
循环后
成功改变num数组内部内容,而没有改变其引用。
1.3,数组类
方法1:复制指定数组至指定长度
num=Arrays.copyOf (nums1 5);
方法2:复制指定数组的指定长度
num=Arrays.copyOfRange (nums1 0 5);
两种方法最后的索引都可以在数组的长度,然后后面的都会补上0。
两种方法都可以成功复制数组,而且我们发现原数组num从524变成了526,说明这两种复制方法是创建了一个新数组,然后用等号左边的数组指向这个新数组。
1.4,系统。arraycopy方法
系统。targetArray arraycopy (originalArray, 0, 0, originalArray.length);
可以看出这个方法类似于我们的对循环,是直接改原来数组的内容,没有改引用。
2,数组长度不等
赋值法成功的循环要注意越界问题,会报java.lang.ArrayIndexOutOfBoundsExceptionArrays类法成功注意越界问题,会报. lang。ArrayIndexOutOfBoundsException
其他:
给定一个数组num,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。
//思路:设置一个指数,表示非0数的个数,循环遍历数组,//如果不是0,将非0值移动到第指数位置,然后指数+ 1//遍历结束之后,索引值表示为非0的个数,再次遍历,从指数位置后的位置此时都应该为0 公共空间moveZeroes (int [] num) { 如果(num==null | | num。长度& lt;=1) { 返回; } int指数=0; for (int i=0;我& lt;nums.length;我+ +){ 如果(num[我]!=0){ num(指数)=num[我]; 指数+ +; } } for (int i=指数;我& lt;nums.length;我+ +){ num[我]=0; } }
看完了这篇文章,相信你对java复制数组的案例有了一定的了解,想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!