java如何複製陣列

2020-10-19 18:00:20

1、陣列長度相等

假設nums和nums1是長度相等的兩個陣列。

(推薦教學:)

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如何複製陣列的詳細內容,更多請關注TW511.COM其它相關文章!