Rumah Java javaTutorial Bagaimana untuk menukar tatasusunan ke Senarai dalam Java

Bagaimana untuk menukar tatasusunan ke Senarai dalam Java

Apr 19, 2023 am 09:13 AM
java list

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);  }
Salin selepas log masuk

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)
Salin selepas log masuk

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);  }
Salin selepas log masuk

Hasil pelaksanaan: Elemen "1" berjaya ditambahkan.

[null, null, 1]
Salin selepas log masuk
Salin selepas log masuk

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);
Salin selepas log masuk

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);  }
Salin selepas log masuk

Hasil pelaksanaan: Elemen "1" juga berjaya ditambahkan.

[null, null, 1]
Salin selepas log masuk
Salin selepas log masuk

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;     }
Salin selepas log masuk

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);
Salin selepas log masuk

Hasil berjalan :

[null, null]
Salin selepas log masuk

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);
Salin selepas log masuk

Jalankan hasil:

[null, null, 2]
Salin selepas log masuk

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);
Salin selepas log masuk

Hasil yang sedang dijalankan:

[null, null, 3]
Salin selepas log masuk

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);//此处报错!!!
Salin selepas log masuk

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> {省略&hellip;}
Salin selepas log masuk

Mari lihat definisi kod sumber Java bagi Arrays.asList():

public static List asList(T... a) {     return new ArrayList<>(a); }
Salin selepas log masuk
  • 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);//编译报错
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

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

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

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

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

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

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

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

Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

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

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

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

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

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

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

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

See all articles