將一個陣列複製到另一個陣列上
複製陣列
這是我做leetbook陣列題的第一題時遇到的疑問,決定分兩個情況考慮。
1、陣列長度相等
假設nums和nums1是長度相等的兩個陣列。
1.1、用nums = nums1;
賦值前
賦值後
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];
}
迴圈前:
迴圈後:
成功改變nums陣列內部內容,而沒有改變其引用。
1.3、Arrays類
方法1:複製指定陣列至指定長度
nums = Arrays.copyOf(nums1,5);
方法2:複製指定陣列的指定長度
nums = Arrays.copyOfRange(nums1,0,5);
兩種方法最後的索引都可以>陣列的長度,然後後面的都會補上0。
兩種方法都可以成功複製陣列,而且我們發現原陣列nums從524變成了526,說明這兩種複製方法是建立了一個新陣列,然後用等號左邊的陣列指向這個新陣列。
1.4、System.arraycopy方法
System.arraycopy(originalArray, 0, targetArray, 0, originalArray.length);
可以看出這個方法類似於我們的for迴圈,是直接改原來陣列的內容,沒有改引用。
2、陣列長度不等
- 賦值法成功
- for迴圈要注意越界問題,會報java.lang.ArrayIndexOutOfBoundsException
- Arrays類法成功
- 注意越界問題,會報java.lang.ArrayIndexOutOfBoundsException
相關文章
- javascript 將一個陣列中的元素的值複製到另一個已有資料的陣列中JavaScript陣列
- 一個陣列和另一個陣列比較,如果第一個陣列裡面有的就不新增了陣列
- 將個人註冊資訊傳到另一個頁面(包含陣列的傳遞)陣列
- 將兩個有序陣列合併為一個有序陣列陣列
- 將一個Collection轉為陣列陣列
- 物件陣列 根據key 把一樣的push到一個陣列物件陣列
- Python多個陣列合並(拼接)為一個陣列Python陣列
- 兩個有序陣列如何合併成一個有序陣列陣列
- JS 複製陣列和物件JS陣列物件
- C# 將資料夾中檔案複製到另一個資料夾C#
- 陣列去除重複的幾個方法陣列
- C# unsafe 快速複製陣列C#陣列
- 克隆一個陣列的方法陣列
- 將一個多維陣列徹底的降維陣列
- MongoDB 複製一個collection裡的資料到另一個collectionMongoDB
- C/C++ 讀入一個整型陣列,陣列大小未知C++陣列
- [求解]陣列,分成倆個陣列,陣列值之和的相差最小。陣列
- 陣列合並且去重&向一個陣列新增一條資料(重複的就不新增)&陣列物件去重處理陣列物件
- 寫一個方法找出指定一維陣列所有不重複的元素和個數陣列
- JS中的陣列複製問題JS陣列
- 陣列(引用型別)複製問題陣列型別
- 求解一個陣列的所有子集陣列
- js 從目標陣列中過濾掉 一個陣列元素,JS陣列
- 查詢陣列中相似欄位(陣列裡面某個值相似歸類到一起)陣列
- NumPy 陣列複製與檢視詳解陣列
- JavaScript 拼接多個陣列並刪除重複元素JavaScript陣列
- 【Azure Developer】一個複製Redis Key到另一個Redis服務的工具(redis_copy_net8)DeveloperRedis
- 判斷一個陣列是否排好序陣列
- JavaScript遍歷陣列每一個元素JavaScript陣列
- 編寫一個函式,實現兩個整型陣列的合併(將兩個整型陣列a和b合併成一個從小到大有序排列的整形陣列c,並在主函式中測試)。函式陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- 一個關於php兩個陣列compare實踐PHP陣列
- 陣列中每個陣列元素出現的次數陣列
- C#高效能陣列複製實驗C#陣列
- java語言複製陣列的四種方法Java陣列
- linux複製檔案到另一個資料夾怎麼操作 linux複製檔案的命令介紹Linux
- 輸入一個整數陣列,輸出奇偶數相間排列的陣列陣列
- 每日一練(46):兩個陣列的交集陣列