Rumah > Java > javaTutorial > Bagaimana untuk menukar tatasusunan ke Senarai dalam Java

Bagaimana untuk menukar tatasusunan ke Senarai dalam Java

WBOY
Lepaskan: 2023-04-19 09:13:04
ke hadapan
2993 orang telah melayarinya

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!

Label berkaitan:
sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan