Bagaimana untuk menukar tatasusunan ke Senarai dalam Java
1. Kaedah yang paling biasa (tidak semestinya yang terbaik)
Gunakan kaedah Arrays.asList(strArray) Selepas menukar tatasusunan kepada Senarai, anda tidak boleh menambah atau memadam Senaraikan, anda hanya boleh menyemak dan mengubah suai jika tidak membuang pengecualian.
Kod kunci: Senarai senarai = Arrays.asList(strArray);
private void testArrayCastToListError() { String[] strArray = new String[2]; List list = Arrays.asList(strArray); //对转换后的list插入一条数据 list.add("1"); System.out.println(list); }
Hasil pelaksanaan:
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at com.darwin.junit.Calculator.testArrayCastToList(Calculator.java:19) at com.darwin.junit.Calculator.main(Calculator.java:44)
Atur cara berada dalam list.add("1 ") Pada, pengecualian dilemparkan: UnsupportedOperationException.
Analisis sebab:
Nilai pulangan Arrays.asList(strArray) ialah kelas dalaman statik peribadi java.util.Arrays.ArrayList dalam kelas java.util.Arrays, yang bukan kelas java.util. Kelas java.util.Arrays.ArrayList telah set(), get(), contains() dan kaedah lain, tetapi tidak mempunyai kaedah add() atau remove(), jadi memanggil kaedah add() akan melaporkan ralat.
Senario penggunaan: Kaedah Arrays.asList(strArray) hanya boleh digunakan selepas menukar tatasusunan kepada Senarai Tidak perlu menambah atau memadam nilai di dalamnya. Ia hanya boleh digunakan sebagai data sumber untuk dibaca.
2. Selepas tatasusunan ditukar kepada Senarai, kaedah menambah, memadam, mengubahsuai dan menyemak disokong
Melalui pembina ArrayList, nilai pulangan bagi Arrays.asList(strArray) ditukar oleh java .util.Arrays.ArrayList ditukar kepada java.util.ArrayList.
Kod kunci: ArrayList
private void testArrayCastToListRight() { String[] strArray = new String[2]; ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ; list.add("1"); System.out.println(list); }
Hasil pelaksanaan: Elemen "1" berjaya ditambahkan.
[null, null, 1]
Senario penggunaan: Selepas menukar tatasusunan kepada Senarai, anda perlu menambah, memadam, mengubah suai dan menyemak Senarai Ini boleh digunakan apabila jumlah data dalam Senarai tidak besar.
3. Tukar melalui kaedah Collections.addAll() kelas alat koleksi (paling cekap)
Tukar melalui Collections.addAll(arrayList, strArray), mengikut kepanjangan tatasusunan Cipta Senarai dengan panjang yang sama, dan kemudian gunakan kaedah Collections.addAll() untuk menukar elemen dalam tatasusunan kepada binari dan kemudian menambahnya ke Senarai Ini adalah kaedah yang paling cekap.
Kod kunci:
ArrayList< String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray);
Ujian:
private void testArrayCastToListEfficient(){ String[] strArray = new String[2]; ArrayList< String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray); arrayList.add("1"); System.out.println(arrayList); }
Hasil pelaksanaan: Elemen "1" juga berjaya ditambahkan.
[null, null, 1]
Senario penggunaan: Selepas menukar tatasusunan kepada Senarai, anda perlu menambah, memadam, mengubah suai dan menyemak Senarai Apabila jumlah data dalam Senarai adalah besar, gunakannya dahulu, yang mana boleh meningkatkan kelajuan operasi.
Nota: Dilampirkan kod sumber kaedah Collections.addAll():
public static <T> boolean addAll(Collection<? super T> c, T... elements) { boolean result = false; for (T element : elements) result |= c.add(element);//result和c.add(element)按位或运算,然后赋值给result return result; }
Soalan Jawab Soalan: Jika jenis tatasusunan ialah tatasusunan integer, adakah ralat akan dilaporkan apabila ia ditukar kepada Senarai?
Jawapan: Diuji dalam persekitaran JDK1.8, tiada masalah dengan ketiga-tiga kaedah penukaran ini. Gunakan dengan yakin. Kaedah dan keputusan ujian untuk menukar tatasusunan integer Integer[] kepada Senarai adalah seperti berikut:
Kaedah 1: Penambahan dan pemadaman tidak disokong
Integer[] intArray1 = new Integer[2]; List<Integer> list1 = Arrays.asList(intArray1); System.out.println(list1);
Hasil berjalan :
[null, null]
Kaedah 2: Menyokong penambahan dan pemadaman
Integer[] intArray2 = new Integer[2]; List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(intArray2)) ; list2.add(2); System.out.println(list2);
Jalankan hasil:
[null, null, 2]
Kaedah 3: Menyokong penambahan dan pemadaman, dan jumlah data adalah besar Yang paling cekap
Integer[] intArray3 = new Integer[2]; List<Integer> list3 = new ArrayList<Integer>(intArray3.length); Collections.addAll(list3, intArray3); list3.add(3); System.out.println(list3);
Hasil yang sedang dijalankan:
[null, null, 3]
Ringkasnya, menukar tatasusunan integer Integer[] ke Senarai
adalah mudah Ralat: Ralat yang mungkin boleh ditukar seperti ini:
int[] intArray1 = new int[2]; List<Integer> list1 = Arrays.asList(intArray1);//此处报错!!!
Sebab ralat: Jenis pada kedua-dua belah tanda sama adalah tidak konsisten, dan sudah tentu kompilasi tidak akan lulus. Lihat di bawah untuk analisis.
Jadi apabila mengisytiharkan tatasusunan, patutkah anda menggunakan int[] atau Integer[], kaedah pengisytiharan manakah yang boleh menukarnya dengan betul kepada Senarai?
Jawapan: Anda hanya boleh menggunakan Integer[] untuk menukar Senarai
Sebabnya dianalisis seperti berikut:
Mari kita lihat definisi Senarai dalam kod sumber Java (jangan takut anda tidak dapat memahami kod sumber, tonton analisis saya, ia sangat mudah difahami):
public interface List<E> extends Collection<E> {省略…}
Mari lihat definisi kod sumber Java bagi Arrays.asList():
public static List asList(T... a) { return new ArrayList<>(a); }
Seperti yang dapat dilihat daripada kod sumber di atas, Apabila mengisytiharkan Senarai, anda perlu lulus generik
Apakah jenis rujukan ? Integer ialah jenis rujukan, jadi apakah jenis int ialah jenis data asas, bukan jenis rujukan. Inilah sebabnya mengapa tiada Senarai dalam Java
Buat inferens tentang kes lain: 8 jenis data asas lain bait, pendek, int, panjang, apungan, berganda dan char bukan rujukan jenis, jadi 8 jenis data asas Tiada jenis data boleh digunakan sebagai parameter rasmi Senarai. Walau bagaimanapun, Rentetan, tatasusunan, kelas dan antara muka ialah jenis rujukan dan boleh digunakan sebagai parameter rasmi Senarai, jadi terdapat Senarai
Dengan pengetahuan asas di atas, mari lihat sebabnya dua baris kod berikut ialah Baris kedua berjaya menyusun, tetapi baris ketiga menyusun dan melaporkan ralat
int[] intArray1 = new int[1]; Arrays.asList(intArray1);//编译不报错 List<Integer> list1 = Arrays.asList( intArray1);//编译报错
Jawapan:
Barisan kedua? kod, parameter input kaedah Arrays.asList() Ia adalah jenis rujukan int[], maka jenis nilai pulangan mestilah Senarai
Baris ketiga melaporkan ralat kerana jenis pada kedua-dua belah tanda sama adalah tidak konsisten Bahagian kiri: Senarai
Atas ialah kandungan terperinci Bagaimana untuk menukar tatasusunan ke Senarai dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Armstrong di Jawa. Di sini kita membincangkan pengenalan kepada nombor Armstrong di java bersama-sama dengan beberapa kod.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah
