Saya memiliki array yang diinisialisasi seperti:
Element[] array = {new Element(1), new Element(2), new Element(3)};
Saya ingin mengubah array ini menjadi objek ArrayList
kelas.
ArrayList<Element> arraylist = ???;
java
arrays
arraylist
type-conversion
Ron Tuffin
sumber
sumber
ArrayList
. Poster itu meminta secara spesifik untuk itu.Jawaban:
sumber
new ArrayList
panggilan juga tidak perlu.List<ClassName> list = Arrays.asList(array)
Arrays.asList(array)
tanpa melewatkannya keArrayList
objek baru akan memperbaiki ukuran daftar. Salah satu alasan paling umum untuk menggunakanArrayList
adalah untuk dapat secara dinamis mengubah ukurannya, dan saran Anda akan mencegah hal ini.Diberikan:
Jawaban paling sederhana adalah melakukan:
Ini akan bekerja dengan baik. Tetapi beberapa peringatan:
ArrayList
. Kalau tidak, Anda akan mendapatkanUnsupportedOperationException
.asList()
didukung oleh array asli. Jika Anda memodifikasi array asli, daftar akan dimodifikasi juga. Ini mungkin mengejutkan.sumber
java.util.ArrayList
. Arrays.asList sebenarnya mengembalikanjava.util.Arrays.ArrayList
yang bukaninstanceof
kelas lain. Jadi peringatan ketiga adalah bahwa jika Anda mencoba menggunakannya dalam konteks yang memerlukan di atas itu tidak akan berfungsi.(utas lama, tetapi hanya 2 sen karena tidak ada yang menyebutkan Guava atau lib lainnya dan beberapa detail lainnya)
Jika Anda Bisa, Gunakan Jambu Biji
Ada baiknya menunjukkan cara Guava, yang sangat menyederhanakan shenanigans ini:
Pemakaian
Untuk Daftar yang Tidak Berubah
Gunakan
ImmutableList
kelas dan yangof()
dancopyOf()
pabrik metode (unsur yang tidak dapat null) :Untuk Daftar Mutable
Gunakan
Lists
kelas dannewArrayList()
metode pabriknya:Harap perhatikan metode serupa untuk struktur data lainnya di kelas lain, misalnya di
Sets
.Kenapa Jambu Biji?
Daya tarik utama dapat mengurangi kekacauan karena obat generik untuk keselamatan jenis, karena penggunaan metode pabrik Jambu memungkinkan jenis disimpulkan sebagian besar waktu. Namun, argumen ini menahan lebih sedikit air sejak Java 7 tiba dengan operator berlian baru.
Tapi itu bukan satu-satunya alasan (dan Java 7 belum ada di mana-mana): sintaks steno juga sangat berguna, dan metode inisialisasi, seperti yang terlihat di atas, memungkinkan untuk menulis kode yang lebih ekspresif. Anda dapat melakukan dalam satu panggilan Guava apa yang dibutuhkan 2 dengan Koleksi Java saat ini.
Jika Kamu Tidak Bisa ...
Untuk Daftar yang Tidak Berubah
Gunakan kelas JDK
Arrays
danasList()
metode pabriknya, dibungkus denganCollections.unmodifiableList()
:Perhatikan bahwa tipe yang dikembalikan untuk
asList()
adalahList
menggunakanArrayList
implementasi konkret , tetapi BUKANjava.util.ArrayList
. Ini adalah tipe bagian dalam, yang mengemulasi sebuahArrayList
tetapi sebenarnya secara langsung mereferensikan array yang lewat dan membuatnya "menulis" (modifikasi tercermin dalam array).Itu melarang modifikasi melalui beberapa
List
metode API dengan cara hanya memperpanjang suatuAbstractList
(jadi, menambah atau menghapus elemen tidak didukung), namun itu memungkinkan panggilanset()
untuk menimpa elemen. Dengan demikian daftar ini tidak benar-benar abadi dan panggilan untukasList()
dibungkusCollections.unmodifiableList()
.Lihat langkah selanjutnya jika Anda membutuhkan daftar yang dapat diubah.
Untuk Daftar Mutable
Sama seperti di atas, tetapi dibungkus dengan aktual
java.util.ArrayList
:Untuk Tujuan Pendidikan: Cara Manual Yang Baik
sumber
List
dikembalikan olehArrays.asList
bisa berubah karena Anda masih bisaset
elemen - itu hanya tidak dapat diubah ukurannya. Untuk daftar abadi tanpa Jambu Anda mungkin menyebutkanCollections.unmodifiableList
.arrayToList
untuk Java 1.5+ Anda salah. Anda membuat daftarString
, dan mencoba untuk mengambil string dari array yang diberikan, daripada menggunakan tipe parameter umumT
,. Selain itu, jawaban yang bagus, dan +1 untuk menjadi satu-satunya termasuk cara manual.O(1)
, tetapi untuk kekekalan Anda harus membuat salinan, misalnya olehCollections.unmodifiableList(new ArrayList<>(Arrays.asList(array)))
.Karena pertanyaan ini cukup lama, saya terkejut karena belum ada yang menyarankan bentuk paling sederhana:
Pada Java 5,
Arrays.asList()
mengambil parameter varargs dan Anda tidak perlu membuat array secara eksplisit.sumber
List<String> a = Arrays.asList("first","second","third")
Pastikan
myArray
jenisnya sama denganT
. Anda akan mendapatkan kesalahan kompiler jika Anda mencoba membuatList<Integer>
dari arrayint
, misalnya.sumber
Cara lain (meskipun pada dasarnya setara dengan
new ArrayList(Arrays.asList(array))
solusi kinerja-bijaksana:sumber
Jawa 9
Di Java 9 , Anda dapat menggunakan
List.of
metode pabrik statis untuk membuatList
literal. Sesuatu seperti yang berikut ini:Ini akan mengembalikan daftar yang tidak berubah yang mengandung tiga elemen. Jika Anda ingindaftar yang dapat diubah , berikan daftar itu ke
ArrayList
konstruktor:JEP 269: Metode Kenyamanan Pabrik untuk Koleksi
JEP 269 menyediakan beberapa metode pabrik praktis untuk Java Collections API. Metode pabrik statis abadi dibangun ke dalam
List
,Set
danMap
antarmuka di Jawa 9 dan kemudian.sumber
Anda mungkin hanya perlu Daftar, bukan ArrayList. Dalam hal ini Anda hanya dapat melakukan:
sumber
set
metode), Anda tidak dapat mengubah ukuran daftar (bukanadd
atauremove
elemen)!Pembaruan lain, hampir berakhir tahun 2014, Anda juga dapat melakukannya dengan Java 8:
Beberapa karakter akan disimpan, jika ini bisa saja a
List
sumber
Collectors.toList()
sebenarnya mengembalikan sebuahArrayList
.Jika Anda menggunakan:
Anda dapat membuat dan mengisi dua daftar! Mengisi dua kali daftar besar adalah persis apa yang tidak ingin Anda lakukan karena itu akan membuat
Object[]
array lain setiap kali kapasitas perlu diperpanjang.Untungnya implementasi JDK cepat dan
Arrays.asList(a[])
dilakukan dengan sangat baik. Itu membuat semacam ArrayList bernama Arrays.ArrayList di mana data Object [] menunjuk langsung ke array.Sisi berbahaya adalah bahwa jika Anda mengubah array awal, Anda mengubah Daftar!Anda yakin ingin itu? Mungkin ya mungkin tidak.
Jika tidak, cara yang paling bisa dipahami adalah melakukan ini:
Atau seperti kata @glglgl, Anda dapat membuat ArrayList independen lain dengan:
Saya suka menggunakan
Collections
,Arrays
atau jambu. Tetapi jika itu tidak cocok, atau Anda tidak merasakannya, tulis saja baris lain yang tidak menarik.sumber
new ArrayList<T>(Arrays.asList(myArray));
bagian yang Anda tidak ingin gunakan. Keduanya melakukan hal yang sama dan memiliki kompleksitas yang sama.new ArrayList<T>(Arrays.asList(myArray));
melakukan hal yang sama, ini menyalinasList
keArrayList
...Di dalam
Java 9
Anda dapat menggunakan:sumber
Menurut pertanyaan, jawabannya menggunakan java 1.7 adalah:
Namun lebih baik selalu menggunakan antarmuka:
sumber
sumber
Anda dapat mengonversi menggunakan metode yang berbeda
List<Element> list = Arrays.asList(array);
List<Element> list = new ArrayList();
Collections.addAll(list, array);
Arraylist list = new Arraylist();
list.addAll(Arrays.asList(array));
Untuk detail lebih lanjut Anda bisa merujuk ke http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.html
sumber
karena semua mengatakan ini akan melakukannya
dan cara terbaru umum untuk membuat array adalah observableArrays
Daftar Teramati: Daftar yang memungkinkan pendengar melacak perubahan saat itu terjadi.
untuk Java SE Anda dapat mencoba
itu menurut Oracle Docs
Perbarui Java 9
juga di Java 9 itu sedikit mudah:
sumber
Karena Java 8 ada cara yang lebih mudah untuk mengubah:
sumber
Anda juga dapat melakukannya dengan streaming di Java 8.
sumber
Collectors.toList()
akan mengembalikan sebuahArrayList
. Namun ini mungkin berbeda di versi masa depan di java. Jika Anda ingin jenis koleksi tertentu kemudian gunakan diCollectors.toCollection()
mana Anda dapat menentukan jenis koleksi yang tepat yang ingin Anda buat.Jika kita melihat definisi
Arrays.asList()
metode, Anda akan mendapatkan sesuatu seperti ini:Jadi, Anda dapat menginisialisasi
arraylist
seperti ini:Mungkin ada jawaban lain untuk pertanyaan ini juga.
Jika Anda melihat deklarasi untuk
java.util.Collections.addAll()
metode, Anda akan mendapatkan sesuatu seperti ini:Jadi, kode ini juga berguna untuk melakukannya
sumber
Cara sederhana lain adalah menambahkan semua elemen dari array ke ArrayList baru menggunakan untuk setiap loop.
sumber
Jika array adalah tipe primitif, jawaban yang diberikan tidak akan berfungsi. Tetapi karena Java 8 Anda dapat menggunakan:
sumber
char
array.Anda dapat melakukannya di java 8 sebagai berikut
sumber
ArrayList<String> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));
Kita dapat dengan mudah mengonversi array menjadi
ArrayList
. Kami menggunakanaddAll()
metode Koleksi antarmuka untuk tujuan menyalin konten dari satu daftar ke yang lain.sumber
ArrayList
konstruktor menerima? extends Collection<T>
argumen, membuat panggilan menjadiaddAll
mubazir.Meskipun ada banyak jawaban yang ditulis dengan sempurna untuk pertanyaan ini, saya akan menambahkan masukan saya.
Katakan sudah
Element[] array = { new Element(1), new Element(2), new Element(3) };
ArrayList baru dapat dibuat dengan cara berikut
Dan mereka sangat mendukung semua operasi ArrayList
Tetapi operasi berikut mengembalikan hanya tampilan daftar ArrayList dan bukan ArrayList yang sebenarnya.
Oleh karena itu, mereka akan memberikan kesalahan ketika mencoba membuat beberapa operasi ArrayList
Lebih lanjut tentang Representasi daftar tautan larik .
sumber
Cara paling sederhana untuk melakukannya adalah dengan menambahkan kode berikut. Sudah Mencoba dan Diuji.
sumber
Outputnya adalah ...
Halo
dunia
sumber
Gunakan kode berikut untuk mengubah array elemen menjadi ArrayList.
sumber
Sudah semua orang memberikan jawaban yang cukup baik untuk masalah Anda. Sekarang dari semua saran, Anda harus memutuskan mana yang sesuai dengan kebutuhan Anda. Ada dua jenis koleksi yang perlu Anda ketahui. Satu adalah koleksi yang tidak dimodifikasi dan satu lagi koleksi yang akan memungkinkan Anda untuk memodifikasi objek nanti.
Jadi, Di sini saya akan memberikan contoh singkat untuk dua kasus penggunaan.
Pembuatan koleksi tidak berubah :: Ketika Anda tidak ingin mengubah objek koleksi setelah pembuatan
List<Element> elementList = Arrays.asList(array)
Pembuatan koleksi yang dapat diubah :: Bila Anda mungkin ingin memodifikasi objek koleksi yang dibuat setelah pembuatan.
List<Element> elementList = new ArrayList<Element>(Arrays.asList(array));
sumber
List
dikembalikan olehArrays.asList
hanya pembungkus atas array asli, dan memungkinkan setiap item diakses dan dimodifikasi melaluiget
danset
. Anda mungkin harus mengklarifikasi bahwa maksud Anda "tidak menambah atau menghapus elemen" alih-alih "tidak berubah", yang berarti tidak berubah sama sekali.Array Objek yang Diberikan:
Konversi Array ke Daftar:
Konversi Array ke ArrayList
Konversi Array ke LinkedList
Daftar cetak:
KELUARAN
1
2
3
sumber
Kelas Array Java 8 menyediakan metode stream () yang memiliki versi overload yang menerima array primitif dan array Obyek.
sumber
Kode di bawah ini sepertinya cara yang bagus untuk melakukan ini.
sumber