Java-Integer-Array und generisches Array sind häufig verwendete Datenstrukturen in der Java-Programmierung. Ein Integer-Array ist ein bestimmter Array-Typ, der nur Daten vom Integer-Typ speichern kann. Generische Arrays sind ein flexiblerer Array-Typ, der jede Art von Daten speichern kann. In Java können wir ganzzahlige Arrays und generische Arrays verwenden, um verschiedene Funktionen wie Sortieren, Suchen, Einfügen, Löschen und andere Operationen zu implementieren. In diesem Artikel werden die grundlegenden Konzepte und allgemeinen Operationen von Java-Integer-Arrays und generischen Arrays vorgestellt, um den Lesern zu helfen, diese beiden Array-Typen besser zu verstehen und anzuwenden.
Die Ausgabe 2022 von „ap computer science a prep“ von The Princeton Review enthält Beispielfragen mit dem folgenden Code:
public class Screen { private ArrayList<int>[] data; . . . }
Gibt es einen Java-Versionsfehler? arraylistbd43222e33876353aff11e13a7dc75f6
是有效的构造?我的理解是,在所有情况下都需要是 arraylist979e7f42ea08258251c39ffe96b911f2
。使用 java 17 和 21(这是我的系统上安装的),arraylistbd43222e33876353aff11e13a7dc75f6
会产生 unexpected type
definieren (vorausgesetzt, wir möchten 10 Arraylisten), aber da Java keine generischen Arrays unterstützt, schlägt es beim Erstellen eines arraylist979e7f42ea08258251c39ffe96b911f2[] data
,我们如何正确实例化它?显而易见的解决方案是 data = new arraylist979e7f42ea08258251c39ffe96b911f2[10]
generischen Arrays fehl.
Wenn Sie das jemals könnten, glauben Sie nicht, dass es eine große Sache wäre, insbesondere ihre Entfernung? Java bricht selten die Abwärtskompatibilität! )
Unmöglich. Sie können es nicht 2 korrekt instanziieren. Es macht keinen Sinn, ein Array nicht-primitiver Typen zu haben. List97ed5daf1c40c5076e17fb9aab061ab6> ist Listc0f559cc8d56b43654fcbe4aa9df7b4a[] in jeder Hinsicht überlegen. Erstellen Sie also einfach eine Liste mit Listen. List97ed5daf1c40c5076e17fb9aab061ab6>
在所有方面都优于 Listc0f559cc8d56b43654fcbe4aa9df7b4a[]
warumdas nicht möglich ist, oder dass es eine schlechte Idee ist, oder, nun ja, irgendetwas, das zeigt, dass das Problem, das Sie hervorheben, genau das ist, was dieses Buch betrifft über den Punkt, den Sie zum Ausdruck bringen möchten.
Wenn das nicht im Buch steht und sie entweder behaupten, dass es sich um gültiges Java handelt oder dass es irgendwie damit zusammenhängt, dann ist es ein Mistbuch. Vielleicht kann ich es deshalb nicht online finden :)Zusammenfassend:
Listebd43222e33876353aff11e13a7dc75f6 erstellen. Das können Sie jetzt nicht tun. Du hast es noch nie geschafft. Listbd43222e33876353aff11e13a7dc75f6
1
Listc0f559cc8d56b43654fcbe4aa9df7b4a[] ist ein Idiot. Kein Code sollte so geschrieben werden. Arrays haben verschiedene Nachteile. Ihre Vorteile sind gering; ihre Vorteile sind in diesem Fall irrelevant, weshalb Arrays existieren (teilweise als Low-Level-„Klebstoff“ – die Implementierung von Listc0f559cc8d56b43654fcbe4aa9df7b4a[]
是白痴。任何代码都不应该这样写。数组有各种各样的缺点。它们的优点很少;它们的优点在这种情况下是无关紧要的,这就是数组确实存在的原因(部分作为低级“粘合剂” - java.util.ArrayList
的实现是用 java 编写的,并在内部使用 Object[]
。有些东西必须- 部分原因是 int[]
目前在空间和时间上确实比 Listc0f559cc8d56b43654fcbe4aa9df7b4a
java.util.ArrayList ist in Java geschrieben und verwendet
[1]Möglicherweise um JDK25+ Möglicherweise able – Project Valhalla ist das OpenJDK-Team, das versucht, eine Möglichkeit zu finden, codierbare Datentypen zu erstellen, die Standardreferenztypen ähneln, sich aber wie Grundelemente implementieren und verhalten, und als Teil davon 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)
, das ist eindeutig nicht möglich. Dies ist nur der schwierigste Teil von Walhalla und einer von Millionen Gründen, warum er möglicherweise nie passieren wird. Wenn Sie mehr darüber erfahren oder einfach auf dem Laufenden bleiben möchten, Schauen Sie sich JEP 218 an Diese Änderung wurde durch einen Kommentar von @M.Justin verursacht :)
[2] „Angemessen“ ist ein subjektiver Begriff. Ich definiere es hier genau so, wie ich es erwarte: keine Warnungen vom Compiler, keine Notwendigkeit für @SuppressWarnings
。也可能定义为:在不破坏数组所做的承诺的情况下 - 这也是不可能的(一个“承诺”是数组可以在运行时通过 arrRef.getClass() 告诉您其组件类型.getComponentType()
。简单地说,这只能告诉你:我是一个 ArrayList
引用的数组 - 它不能告诉你 ArrayListc0f559cc8d56b43654fcbe4aa9df7b4a
。只有 ArrayList
.
ArrayListbd43222e33876353aff11e13a7dc75f6
ein gültiges Konstrukt? - Nein. In Java funktionieren generische Typen nicht mit primitiven Datentypen.
Wie instanziieren wir ArrayListc0f559cc8d56b43654fcbe4aa9df7b4a[]
richtig? - Sie können es tun, indem Sie -
Listc0f559cc8d56b43654fcbe4aa9df7b4a[] a = new ArrayList[10];
Java erlaubt Ihnen nicht, ein generisches Array zu erstellen, aber Sie können einfach ein Array von Objekten erstellen, in diesem Fall eine ArrayList. Dadurch erhalten Sie zwar eine Warnung vor einem ungeprüften oder unsicheren Betrieb, Sie können dies jedoch mit @SuppressWarnings
Anmerkungen beheben.
Das obige ist der detaillierte Inhalt vonJava-Integer-Arrays und generische Arrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!