Jika Anda harus bekerja dengan array mentah dan tidak ArrayList
kemudian Arrays
memiliki apa yang Anda butuhkan. Jika Anda melihat kode sumbernya, ini adalah cara terbaik untuk mendapatkan salinan array. Mereka memiliki sedikit pemrograman defensif karena System.arraycopy()
metode ini melempar banyak pengecualian yang tidak dicentang jika Anda memberinya parameter tidak logis.
Anda dapat menggunakan salah satu Arrays.copyOf()
yang akan menyalin dari Nth
elemen pertama ke array yang lebih pendek baru.
public static <T> T[] copyOf(T[] original, int newLength)
Menyalin array yang ditentukan, memotong atau mengisi dengan nol (jika perlu) sehingga salinan memiliki panjang yang ditentukan. Untuk semua indeks yang valid dalam array asli dan salinan, kedua array akan berisi nilai yang identik. Untuk setiap indeks yang valid dalam salinan tetapi bukan yang asli, salinan akan berisi nol. Indeks tersebut akan ada jika dan hanya jika panjang yang ditentukan lebih besar dari pada array asli. Array yang dihasilkan memiliki kelas yang sama persis dengan array asli.
2770
2771 public static <T,U> T[] More ...copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
2772 T[] copy = ((Object)newType == (Object)Object[].class)
2773 ? (T[]) new Object[newLength]
2774 : (T[]) Array.newInstance(newType.getComponentType(), newLength);
2775 System.arraycopy(original, 0, copy, 0,
2776 Math.min(original.length, newLength));
2777 return copy;
2778 }
atau Arrays.copyOfRange()
akan melakukan trik:
public static <T> T[] copyOfRange(T[] original, int from, int to)
Menyalin kisaran yang ditentukan dari array yang ditentukan ke dalam array baru. Indeks awal rentang (dari) harus berada di antara nol dan asli. Panjang, inklusif. Nilai asli [dari] ditempatkan ke dalam elemen awal dari salinan (kecuali dari == original.length atau dari == ke). Nilai dari elemen berikutnya dalam array asli ditempatkan ke elemen berikutnya dalam salinan. Indeks akhir rentang (ke), yang harus lebih besar dari atau sama dengan dari, mungkin lebih besar dari aslinya. Panjangnya, dalam hal ini nol ditempatkan di semua elemen salinan yang indeksnya lebih besar atau sama dengan aslinya. panjang - dari. Panjang array yang dikembalikan akan ke - dari. Array yang dihasilkan memiliki kelas yang sama persis dengan array asli.
3035 public static <T,U> T[] More ...copyOfRange(U[] original, int from, int to, Class<? extends T[]> newType) {
3036 int newLength = to - from;
3037 if (newLength < 0)
3038 throw new IllegalArgumentException(from + " > " + to);
3039 T[] copy = ((Object)newType == (Object)Object[].class)
3040 ? (T[]) new Object[newLength]
3041 : (T[]) Array.newInstance(newType.getComponentType(), newLength);
3042 System.arraycopy(original, from, copy, 0,
3043 Math.min(original.length - from, newLength));
3044 return copy;
3045 }
Seperti yang Anda lihat, keduanya hanyalah fungsi pembungkus System.arraycopy
dengan logika defensif bahwa apa yang Anda coba lakukan valid.
System.arraycopy
adalah cara tercepat mutlak untuk menyalin array.