Rumah  >  Artikel  >  Java  >  Bagaimanakah saya boleh membuat salinan sebenar tatasusunan 2D di Jawa tanpa mengubah suai tatasusunan asal?

Bagaimanakah saya boleh membuat salinan sebenar tatasusunan 2D di Jawa tanpa mengubah suai tatasusunan asal?

Susan Sarandon
Susan Sarandonasal
2024-10-31 11:58:31571semak imbas

How can I create a true copy of a 2D array in Java without modifying the original array?

Menyalin Tatasusunan 2 Dimensi dalam Java

Apabila bekerja dengan tatasusunan berbilang dimensi di Jawa, selalunya perlu membuat salinan tatasusunan untuk elakkan pengubahsuaian yang tidak dijangka pada tatasusunan asal. Mencipta salinan memastikan tatasusunan asal kekal tidak disentuh, manakala salinan boleh diubah suai secara bebas tanpa menjejaskan salinan asal.

Pertimbangkan senario berikut di mana dua tatasusunan 2D, semasa dan lama, diisytiharkan dan dua kaedah pembantu ditakrifkan :

<code class="java">int[][] current;
int[][] old;

public void old() {
  old = current;
}

public void keepold() {
  current = old;
}</code>

Apabila menggunakan old(), rujukan kepada tatasusunan semasa diberikan kepada tatasusunan lama. Begitu juga, apabila menggunakan keepold(), rujukan kepada tatasusunan lama diberikan kepada tatasusunan semasa. Walau bagaimanapun, tugasan mudah ini tidak mencipta salinan data sebenar. Sebaliknya, ia hanya berkongsi rujukan yang sama kepada data asas yang sama.

Tingkah laku ini boleh menyebabkan kekeliruan apabila kemas kini dibuat pada salah satu tatasusunan. Sebagai contoh, jika kemas kini dibuat kepada semasa, dan kemudian keepold() digunakan, tatasusunan semasa kini akan merujuk data yang sama seperti yang lama. Akibatnya, sebarang pengubahsuaian lanjut kepada lama juga akan mengubah suai semasa, yang bukan tingkah laku yang dimaksudkan.

Untuk mencipta salinan sebenar tatasusunan 2D di Java, teknik yang dipanggil penyalinan dalam mesti digunakan. Ini melibatkan mencipta tatasusunan 2D baharu dan menyalin kandungan tatasusunan asal ke dalamnya, elemen demi elemen. Ini boleh dicapai menggunakan gelung bersarang.

Sebagai alternatif, mulai Java 8, Streams API boleh digunakan untuk menyediakan cara yang lebih ringkas dan cekap untuk melaksanakan penyalinan dalam tatasusunan berbilang dimensi:

<code class="java">int[][] copy = Arrays.stream(matrix).map(int[]::clone).toArray(int[][]::new);</code>

Dalam kod ini, Arrays.stream(matriks) mencipta aliran baris dalam tatasusunan asal. Operasi map(int[]::clone) mencipta tatasusunan baharu untuk setiap baris menggunakan kaedah clone(). Akhir sekali, operasi toArray(int[][]::new) menggabungkan baris klon ke dalam tatasusunan 2D baharu. Tatasusunan yang terhasil ini ialah salinan benar dan boleh diubah suai tanpa menjejaskan tatasusunan asal.

Atas ialah kandungan terperinci Bagaimanakah saya boleh membuat salinan sebenar tatasusunan 2D di Jawa tanpa mengubah suai tatasusunan asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn