1. Gambaran keseluruhan
Dalam tutorial ringkas ini, kita akan melihat perbezaan antara Arrays.asList (array) dan ArrayList (Arrays.asList (array)).
2. Arrays.asList
Mari kita mulakan dengan kaedah Arrays.asList .
Dengan menggunakan kaedah ini, kita dapat menukar dari array ke objek List berukuran tetap . Ini Senarai hanyalah pembalut yang membuat pelbagai yang ada sebagai satu senarai. Tidak ada data yang disalin atau dibuat .
Juga, kami tidak dapat mengubah panjangnya kerana penambahan atau penghapusan elemen tidak dibenarkan .
Walau bagaimanapun, kami dapat mengubahsuai item tunggal di dalam array. Perhatikan bahawa semua pengubahsuaian yang kami buat pada item tunggal dalam Senarai akan ditunjukkan dalam susunan asal kami :
String[] stringArray = new String[] { "A", "B", "C", "D" }; List stringList = Arrays.asList(stringArray);
Sekarang, mari kita lihat apa yang berlaku jika kita mengubah elemen stringList pertama :
stringList.set(0, "E"); assertThat(stringList).containsExactly("E", "B", "C", "D"); assertThat(stringArray).containsExactly("E", "B", "C", "D");
Seperti yang kita lihat, susunan asal kita juga diubah. Kedua-dua senarai dan susunan sekarang mengandungi elemen yang sama persis dalam susunan yang sama.
Sekarang mari kita cuba memasukkan elemen baru ke stringList :
stringList.add("F");
java.lang.UnsupportedOperationException at java.base/java.util.AbstractList.add(AbstractList.java:153) at java.base/java.util.AbstractList.add(AbstractList.java:111)
Seperti yang kita lihat, menambah / membuang elemen ke / dari Senarai akan membuang java.lang.UnsupportedOperationException .
3. ArrayList (Arrays.asList (array))
Sama dengan kaedah Arrays.asList , kita dapat menggunakan ArrayList (Arrays.asList (array)) ketika kita perlu membuat Daftar keluar dari array .
Tetapi, tidak seperti contoh kami sebelumnya, ini adalah salinan array yang bebas, yang bermaksud bahawa mengubah senarai baru tidak akan mempengaruhi array asal . Selain itu, kami mempunyai semua kemampuan ArrayList biasa , seperti menambahkan dan membuang elemen:
String[] stringArray = new String[] { "A", "B", "C", "D" }; List stringList = new ArrayList(Arrays.asList(stringArray));
Sekarang mari kita ubah elemen pertama stringList :
stringList.set(0, "E"); assertThat(stringList).containsExactly("E", "B", "C", "D");
Dan sekarang, mari lihat apa yang berlaku dengan susunan asal kami:
assertThat(stringArray).containsExactly("A", "B", "C", "D");
Seperti yang kita dapat lihat, lokasi asal kita tidak terjejas .
Sebelum mengemas, jika kita melihat kod sumber JDK, kita dapat melihat kaedah Arrays.asList mengembalikan sejenis ArrayList yang berbeza dengan java.util.ArrayList . Perbezaan utama adalah bahawa ArrayList yang dikembalikan hanya membungkus array yang ada - ia tidak melaksanakan kaedah tambah dan buang .
4. Kesimpulan
Dalam artikel pendek ini, kami melihat perbezaan antara dua cara menukar array menjadi ArrayList . Kami melihat bagaimana kedua-dua pilihan tersebut berkelakuan dan perbezaan antara cara mereka melaksanakan susunan dalaman mereka.
Seperti biasa, contoh kod boleh didapati di GitHub.