Rumah > Java > javaTutorial > teks badan

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

Susan Sarandon
Lepaskan: 2024-10-31 11:58:31
asal
589 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!