Bagaimanakah kaedah Arrays.copyOf() dalam Java menyalin tatasusunan ke tatasusunan baharu?
Di Java, tatasusunan ialah struktur data yang sangat biasa, dan kelas Tatasusunan Java memberi kami banyak kaedah yang mudah untuk menangani tatasusunan. Antaranya, kaedah Arrays.copyOf() ialah kaedah yang sangat berguna untuk menyalin tatasusunan kepada tatasusunan baharu. Artikel ini akan memperkenalkan prinsip penggunaan dan pelaksanaan kaedah ini, dan memberikan contoh kod khusus.
Kaedah penggunaan
Kaedah Arrays.copyOf() mempunyai dua parameter: tatasusunan asal dan panjang tatasusunan baharu selepas disalin. Kaedah ini mencipta tatasusunan baharu dan menyalin elemen daripada tatasusunan asal kepada tatasusunan baharu. Jika panjang tatasusunan asal lebih besar daripada atau sama dengan panjang tatasusunan baharu, bahagian hadapan tatasusunan asal akan disalin. Jika panjang tatasusunan asal kurang daripada panjang tatasusunan baharu, semua elemen tatasusunan asal akan disalin ke tatasusunan baharu, dan unsur-unsur selebihnya diisi dengan nilai lalai jenis elemen tatasusunan.
Berikut ialah contoh memanggil kaedah Arrays.copyOf():
int[] arr1 = {1, 2, 3, 4, 5};#🎜 🎜# int[] arr2 = Arrays.copyOf(arr1, 3);
Dalam contoh ini, kami mencipta tatasusunan integer arr1 yang mengandungi 5 elemen. Kami memanggil kaedah Arrays.copyOf() untuk menyalin arr1 ke tatasusunan lain bernama arr2 dan menetapkan panjang arr2 kepada 3. Memandangkan panjang array arr1 ialah 5 dan panjang arr2 ialah 3, kaedah Arrays.copyOf() hanya menyalin 3 elemen pertama arr1 kepada arr2. Akibatnya, arr2 kini mengandungi {1, 2, 3}.
Ini hanyalah contoh paling asas menggunakan kaedah Arrays.copyOf(). Seterusnya, kita akan melihat beberapa penggunaan dan contoh yang lebih kompleks.
Salin tatasusunan dua dimensi
Kaedah Arrays.copyOf() bukan sahaja sesuai untuk tatasusunan satu dimensi, ia juga boleh digunakan untuk menyalin tatasusunan dua dimensi. Dalam contoh berikut, kami mencipta tatasusunan integer dua dimensi bernama matrix1 dan menyalinnya ke tatasusunan lain bernama matrix2 menggunakan kaedah Arrays.copyOf():
int[] [] matrix1 = {{1 , 2, 3}, {4, 5, 6}};
int[][] matriks2 = Arrays.copyOf(matrix1, 2);
Dalam contoh ini, kita menyalin matriks1 ke dalam matriks2 dan tetapkan panjang matriks2 kepada 2. Memandangkan matrix1 ialah tatasusunan dua dimensi dan kaedah Arrays.copyOf() hanya boleh menyalin tatasusunan satu dimensi, kami mencipta tatasusunan dua dimensi baharu dengan panjang 2 dan elemen pertamanya ialah elemen pertama baris matriks1 , elemen kedua ialah baris kedua matriks1. Dengan cara ini kita boleh menyalin satu tatasusunan 2D ke tatasusunan lain.
Salin julat tertentu tatasusunan
Dalam sesetengah kes, kami mungkin hanya mahu menyalin julat tertentu elemen daripada tatasusunan asal. Kaedah Arrays.copyOfRange() ialah kaedah yang sangat berguna yang membolehkan kita menentukan indeks dalam tatasusunan asal untuk mula menyalin dan berakhir pada indeks mana. Berikut ialah contoh kaedah Arrays.copyOfRange():
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Tatasusunan. copyOfRange( arr1, 1, 4);
Dalam contoh ini, kami mencipta tatasusunan integer bernama arr1, yang mengandungi 5 elemen. Kami memanggil kaedah Arrays.copyOfRange() dan menetapkannya kepada arr2. Kami lulus arr1 sebagai parameter pertama kepada kaedah dan 1 dan 4 sebagai parameter kedua dan ketiga. Ini bermakna kita hanya mahu menyalin bermula dari indeks 1 arr1 (iaitu elemen kedua) sehingga indeks 4 (iaitu elemen kelima), tidak termasuk indeks 4. Akibatnya, arr2 kini mengandungi {2, 3, 4}.
Memandangkan kaedah Arrays.copyOfRange() hanya menyalin sebahagian daripada tatasusunan asal, kami boleh menyalin julat elemen tertentu daripada tatasusunan asal dengan cara ini.
Prinsip pelaksanaan
Kaedah Arrays.copyOf() sebenarnya merupakan pelaksanaan dipermudahkan kaedah System.arraycopy(). Kaedah System.arraycopy() ialah salah satu kaedah terpantas di Java untuk menyalin elemen antara tatasusunan dan mempunyai fleksibiliti dan prestasi yang lebih tinggi daripada kaedah Arrays.copyOf(). Selain itu, kaedah System.arraycopy() juga merupakan kaedah pelaksanaan asas bagi kaedah Arrays.copyOf().
Berikut ialah pelaksanaan kod sumber kaedah Arrays.copyOf():
statik awam
T[] copyOf(T[] original, int newLength ) {# 🎜🎜#return (T[]) copyOf(original, newLength, original.getClass());
Salin selepas log masuk
}
statik awam T[] copyOf(U[] original, int newLength, Class memanjangkan T[]> newType) {
@SuppressWarnings("unchecked")
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
Salin selepas log masuk
}
Seperti yang dapat dilihat daripada pelaksanaan kod, baris pertama kaedah Arrays.copyOf() memanggil versi overloaded copyOf() kaedah, dan Hasil yang dikembalikan oleh kaedah ini dikembalikan kepada pemanggil. Kaedah ini menerima tatasusunan asal dan panjang tatasusunan baharu sebagai parameter dan menyerahkannya kepada kaedah copyOf() kedua.
Kaedah copyOf() kedua melaksanakan langkah berikut untuk mencipta tatasusunan baharu dan menyalin elemen:
- Buat tatasusunan generik baharu menggunakan parameter newType.
- Buat tatasusunan baharu menggunakan jenis komponen tatasusunan asal (jika newType bukan Objek[]).
- Gunakan kaedah System.arraycopy() untuk menyalin elemen tatasusunan asal ke tatasusunan baharu.
- Kembalikan tatasusunan baru yang disalin.
Memandangkan pelaksanaan kaedah Arrays.copyOf() bergantung pada kaedah System.arraycopy(), ia mengikut peraturan dan sekatan kaedah ini, seperti tidak menyalin tatasusunan yang merangkumi dua jenis berbeza.
Summary
Kaedah Arrays.copyOf() ialah cara yang mudah untuk menyalin tatasusunan dalam Java Ia boleh mencipta tatasusunan baharu dan menyalin elemen tatasusunan asal ke tatasusunan baharu. Kaedah ini boleh digunakan untuk menyalin tatasusunan satu dan dua dimensi, serta menyalin julat elemen tertentu. Pelaksanaan kaedah Arrays.copyOf() adalah berdasarkan kaedah System.arraycopy(), jadi ia mempunyai peraturan dan sekatan yang sama. Apabila berurusan dengan tatasusunan, kelas Tatasusunan ialah alat yang sangat berguna yang boleh membantu kami mengendalikan dan memanipulasi tatasusunan dengan lebih mudah.
Atas ialah kandungan terperinci Bagaimanakah kaedah Arrays.copyOf() dalam Java menyalin tatasusunan ke dalam tatasusunan baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!