Heim  >  Artikel  >  Java-Integer-Arrays und generische Arrays

Java-Integer-Arrays und generische Arrays

PHPz
PHPznach vorne
2024-02-09 10:48:221111Durchsuche

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.

Frageninhalt

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;
.
.
.
}
  1. Gibt es einen Java-Versionsfehler? arraylistbd43222e33876353aff11e13a7dc75f6 是有效的构造?我的理解是,在所有情况下都需要是 arraylist979e7f42ea08258251c39ffe96b911f2。使用 java 17 和 21(这是我的系统上安装的),arraylistbd43222e33876353aff11e13a7dc75f6 会产生 unexpected type

  2. Wenn wir es als

    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.

Ich versuche zu verstehen, ob dieses Buch Fehler enthält oder ob mein Verständnis von Java völlig fehlt. Danke!

Lösung

Nein. auf keinen Fall. Generika können keine primitiven Typen enthalten, und es gibt nicht einmal eine Java-Version, die das kann (

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[]

Eine gelegentliche Websuche hat den spezifischen Inhalt des Buches nicht gefunden, ebenso wenig wie der von Ihnen angegebene Link (er ist zweifellos schwer zu finden, ich glaube, es ist urheberrechtlich geschützt und der Autor wollte es nicht). Sie müssen für den einfachen Zugriff nicht bezahlen ). Was ich vor allem suche, ist ein Kontext in diesem Kapitel, der erklärt,

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:

  1. Sie können keine

    Listebd43222e33876353aff11e13a7dc75f6 erstellen. Das können Sie jetzt nicht tun. Du hast es noch nie geschafft. Listbd43222e33876353aff11e13a7dc75f61

  2. 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[] 目前在空间和时间上确实比 Listc0f559cc8d56b43654fcbe4aa9df7b4ajava.util.ArrayList ist in Java geschrieben und verwendet

    Object [] intern muss etwas getan werden – auch weil 🎜int[] derzeit viel platz- und zeitintensiver ist als 🎜Listc0f559cc8d56b43654fcbe4aa9df7b4a Schreiben Sie eine dumme Idee, daher ist jedes Buch, das sich ausführlich mit der Umsetzung befasst, für jemanden, der seit 15 Jahren in Java tätig ist, eine gute Lektion, wenn es jemals eine gab Das Getriebe des Ford Model T ist jedoch für das Auto nicht relevant 🎜

[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.

    Ist
  1. ArrayListbd43222e33876353aff11e13a7dc75f6 ein gültiges Konstrukt? - Nein. In Java funktionieren generische Typen nicht mit primitiven Datentypen.

  2. 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 @SuppressWarningsAnmerkungen 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen