您好,登錄后才能下訂單哦!
小編給大家分享一下java復制數(shù)組的案例,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
1、數(shù)組長度相等
假設(shè)nums和nums1是長度相等的兩個數(shù)組。
1.1、用nums = nums1;
賦值前
賦值后
nums創(chuàng)建的時候在堆里面創(chuàng)建一塊內(nèi)存區(qū)域用來存儲,nums指向這個內(nèi)存地址A。nums1創(chuàng)建后指向B。
現(xiàn)在令nums = nums1;則把num1的地址(或者說是引用)賦給了num,所以num也指向了B。兩個數(shù)組都指向堆中同一個內(nèi)存區(qū)域,他們是共享里面的數(shù)據(jù)。
1.2、for循環(huán)
for (int i = 0; i < nums1.length; i++){ nums[i] = nums1[i]; }
循環(huán)前
循環(huán)后
成功改變nums數(shù)組內(nèi)部內(nèi)容,而沒有改變其引用。
1.3、Arrays類
方法1:復制指定數(shù)組至指定長度
nums = Arrays.copyOf(nums1,5);
方法2:復制指定數(shù)組的指定長度
nums = Arrays.copyOfRange(nums1,0,5);
兩種方法最后的索引都可以>數(shù)組的長度,然后后面的都會補上0。
兩種方法都可以成功復制數(shù)組,而且我們發(fā)現(xiàn)原數(shù)組nums從524變成了526,說明這兩種復制方法是創(chuàng)建了一個新數(shù)組,然后用等號左邊的數(shù)組指向這個新數(shù)組。
1.4、System.arraycopy方法
System.arraycopy(originalArray, 0, targetArray, 0, originalArray.length);
可以看出這個方法類似于我們的for循環(huán),是直接改原來數(shù)組的內(nèi)容,沒有改引用。
2、數(shù)組長度不等
賦值法成功for循環(huán)要注意越界問題,會報java.lang.ArrayIndexOutOfBoundsExceptionArrays類法成功注意越界問題,會報java.lang.ArrayIndexOutOfBoundsException
其他:
給定一個數(shù)組 nums,編寫一個函數(shù)將所有 0 移動到數(shù)組的末尾,同時保持非零元素的相對順序。
//思路:設(shè)置一個index,表示非0數(shù)的個數(shù),循環(huán)遍歷數(shù)組, // 如果不是0,將非0值移動到第index位置,然后index + 1 //遍歷結(jié)束之后,index值表示為非0的個數(shù),再次遍歷,從index位置后的位置此時都應(yīng)該為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復制數(shù)組的案例有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。