Tatasusunan integer Java dan tatasusunan generik ialah struktur data yang biasa digunakan dalam pengaturcaraan Java. Tatasusunan integer ialah jenis tatasusunan khusus yang hanya boleh menyimpan data jenis integer. Tatasusunan generik ialah jenis tatasusunan yang lebih fleksibel yang boleh menyimpan sebarang jenis data. Di Java, kita boleh menggunakan tatasusunan integer dan tatasusunan generik untuk melaksanakan pelbagai fungsi, seperti pengisihan, carian, sisipan, pemadaman dan operasi lain. Artikel ini akan memperkenalkan konsep asas dan operasi biasa tatasusunan integer Java dan tatasusunan generik untuk membantu pembaca lebih memahami dan menggunakan kedua-dua jenis tatasusunan ini.
Edisi 2022 "ap computer science a prep" daripada The Princeton Review mengandungi contoh soalan menggunakan kod berikut:
public class Screen { private ArrayList<int>[] data; . . . }
Adakah terdapat ralat versi java arraylistbd43222e33876353aff11e13a7dc75f6
是有效的构造?我的理解是,在所有情况下都需要是 arraylist979e7f42ea08258251c39ffe96b911f2
。使用 java 17 和 21(这是我的系统上安装的),arraylistbd43222e33876353aff11e13a7dc75f6
会产生 unexpected type
.
Jika kita mentakrifkannya sebagai arraylist979e7f42ea08258251c39ffe96b911f2[] data
,我们如何正确实例化它?显而易见的解决方案是 data = new arraylist979e7f42ea08258251c39ffe96b911f2[10]
(dengan andaian kita mahukan 10 senarai tatasusunan), tetapi memandangkan java tidak menyokong tatasusunan generik, ia akan gagal semasa mencipta tatasusunan generik.
Saya cuba memahami sama ada buku ini mempunyai kesilapan atau jika pemahaman saya tentang java benar-benar kurang. Terima kasih!
Tidak. tiada cara. Generik tidak boleh mengandungi jenis primitif, malah tiada versi Java yang boleh (Jika anda boleh, tidakkah anda fikir ia akan menjadi masalah besar, terutamanya penyingkirannya? Java jarang memecah keserasian ke belakang ! )
Mustahil. Anda tidak boleh menyatakannya 2 dengan betul. Tidak masuk akal untuk mempunyai pelbagai jenis bukan primitif. List97ed5daf1c40c5076e17fb9aab061ab6>
在所有方面都优于 Listc0f559cc8d56b43654fcbe4aa9df7b4a[]
Senarai
Carian web kasual tidak menjumpai kandungan khusus buku itu, begitu juga pautan yang anda berikan (sukar dicari, sudah pasti, saya rasa ia berhak cipta dan pengarang tidak mahukannya) Tidak perlu membayar akses mudah ). Perkara utama yang saya cari ialah beberapa konteks dalam bab itu yang menerangkan mengapa
itu tidak mungkin, atau idea yang tidak baik, atau, baiklah, apa-apa sahaja yang menunjukkan bahawa masalah yang anda serlahkan adalah betul-betul buku ini tentang perkara yang anda cuba ungkapkan.Jika ini tiada dalam buku dan mereka sama ada mendakwa ia adalah java yang sah atau mereka mendakwa ia entah bagaimana berkaitan, maka ia adalah buku omong kosong. Mungkin sebab tu saya tak jumpa online :)
Untuk meringkaskan:
Listbd43222e33876353aff11e13a7dc75f6
Anda tidak boleh membuat Listbd43222e33876353aff11e13a7dc75f6. Anda tidak boleh berbuat demikian sekarang. Anda tidak pernah dapat melakukannya. 1
Listc0f559cc8d56b43654fcbe4aa9df7b4a[]
是白痴。任何代码都不应该这样写。数组有各种各样的缺点。它们的优点很少;它们的优点在这种情况下是无关紧要的,这就是数组确实存在的原因(部分作为低级“粘合剂” - java.util.ArrayList
的实现是用 java 编写的,并在内部使用 Object[]
。有些东西必须- 部分原因是 int[]
目前在空间和时间上确实比 Listc0f559cc8d56b43654fcbe4aa9df7b4a
[1]Mungkin sekitar JDK25+ Mungkin boleh - Project Valhalla ialah pasukan OpenJDK yang cuba mencari cara untuk mencipta jenis data boleh kod yang serupa dengan jenis rujukan standard, tetapi melaksanakan dan berkelakuan seperti primitif, dan Sebagai sebahagian daripada ini, Listbd43222e33876353aff11e13a7dc75f6
可能可以变成一个东西。特别是这部分(尝试将 int
仅视为 j.l.Integer
的值类型变体,并使这些类型在泛型中工作)是 Valhalla 项目尚未真正解决的问题,而且可能永远不会解决 - 有显着的向后兼容性问题。例如 j.u.List
接口如何具有方法 remove(int x)
,该方法删除索引 int x
处的对象,以及方法 remove(Object o)
,该方法扫描列表,比较每个对象在 o
的列表中 - 一旦找到匹配项(item.equals(o)
是 true
),即被删除,并且 remove
方法返回。除了以下问题之外: remove()
、contains()
等将 Object
作为参数,而不是 E
(因为你可以询问苹果列表中是否有给定的梨。答案非常简单:不,但是,这不是不合逻辑的问题,因此为什么做出这个选择) - 尝试统一泛型和基元意味着两个签名现在都是 remove(int)
, ini jelas tidak mungkin. Ini hanyalah bahagian paling rumit dalam Valhalla dan satu daripada sejuta sebab mengapa ia tidak mungkin berlaku. Jika anda ingin mengetahui lebih lanjut mengenainya, atau hanya mengikuti perkembangan terkini, Lihat JEP 218 Suntingan ini dibawa oleh komen daripada @M.Justin :)
[2] "Sesuai" ialah istilah subjektif. Saya mentakrifkannya di sini tepat seperti yang saya jangkakan: amaran sifar daripada pengkompil, tidak perlu @SuppressWarnings
。也可能定义为:在不破坏数组所做的承诺的情况下 - 这也是不可能的(一个“承诺”是数组可以在运行时通过 arrRef.getClass() 告诉您其组件类型.getComponentType()
。简单地说,这只能告诉你:我是一个 ArrayList
引用的数组 - 它不能告诉你 ArrayListc0f559cc8d56b43654fcbe4aa9df7b4a
。只有 ArrayList
.
ArrayListbd43222e33876353aff11e13a7dc75f6
binaan yang sah? - Tidak. Di Java, jenis generik tidak berfungsi dengan jenis data primitif.
Bagaimana kita membuat instantiat ArrayListc0f559cc8d56b43654fcbe4aa9df7b4a[]
dengan betul? - Anda boleh melakukannya dengan -
Listc0f559cc8d56b43654fcbe4aa9df7b4a[] a = new ArrayList[10];
Java tidak membenarkan anda mencipta tatasusunan generik, tetapi anda hanya boleh mencipta tatasusunan objek, dalam kes ini ArrayList. Walaupun ini akan memberi anda amaran tentang operasi tidak ditanda atau tidak selamat, anda boleh mengatasinya dengan @SuppressWarnings
anotasi.
Atas ialah kandungan terperinci Tatasusunan integer Java dan tatasusunan generik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!