Maison  >  Article  >  Tableaux entiers Java et tableaux génériques

Tableaux entiers Java et tableaux génériques

PHPz
PHPzavant
2024-02-09 10:48:221143parcourir

Les tableaux d'entiers Java et les tableaux génériques sont des structures de données couramment utilisées dans la programmation Java. Un tableau d'entiers est un type spécifique de tableau qui ne peut stocker que des données de type entier. Les tableaux génériques sont un type de tableau plus flexible qui peut stocker tout type de données. En Java, nous pouvons utiliser des tableaux d'entiers et des tableaux génériques pour implémenter diverses fonctions, telles que le tri, la recherche, l'insertion, la suppression et d'autres opérations. Cet article présentera les concepts de base et les opérations courantes des tableaux d'entiers Java et des tableaux génériques pour aider les lecteurs à mieux comprendre et appliquer ces deux types de tableaux.

Contenu des questions

L'édition 2022 de "ap Computer Science a Prep" de The Princeton Review contient des exemples de questions utilisant le code suivant :

public class Screen {
    private ArrayList<int>[] data;
.
.
.
}
  1. Y a-t-il une erreur de version Java arraylistbd43222e33876353aff11e13a7dc75f6 是有效的构造?我的理解是,在所有情况下都需要是 arraylist979e7f42ea08258251c39ffe96b911f2。使用 java 17 和 21(这是我的系统上安装的),arraylistbd43222e33876353aff11e13a7dc75f6 会产生 unexpected type.

  2. Si nous le définissons comme arraylist979e7f42ea08258251c39ffe96b911f2[] data,我们如何正确实例化它?显而易见的解决方案是 data = new arraylist979e7f42ea08258251c39ffe96b911f2[10] (en supposant que nous voulons 10 listes de tableaux), mais comme Java ne prend pas en charge les tableaux génériques, il échouera lors de la création de tableau générique.

J'essaie de comprendre si ce livre contient des erreurs ou si ma compréhension de Java fait complètement défaut. Merci!

Solution

Non. certainement pas. Les génériques ne peuvent pas contenir de types primitifs, et il n'existe même pas de version de Java qui le puisse (Si vous le pouviez un jour, ne pensez-vous pas que ce serait un gros problème, surtout sa suppression ? Java rompt rarement la rétrocompatibilité ! )

Impossible. Vous ne pouvez pas l'instancier 2 correctement. Cela n'a aucun sens d'avoir un éventail de types non primitifs. List97ed5daf1c40c5076e17fb9aab061ab6> 在所有方面都优于 Listc0f559cc8d56b43654fcbe4aa9df7b4a[]List97ed5daf1c40c5076e17fb9aab061ab6> est supérieur à

Listc0f559cc8d56b43654fcbe4aa9df7b4a[] à tous égards. Alors, faites simplement une liste de listes.

Une recherche occasionnelle sur le Web n'a pas trouvé le contenu spécifique du livre, ni le lien que vous avez fourni (c'est difficile à trouver, sans aucun doute, je pense qu'il est protégé par le droit d'auteur et l'auteur ne le voulait pas) Pas besoin de payer un accès facile ). La chose clé que je recherche est un contexte dans ce chapitre qui explique pourquoi

ce n'est pas possible, ou c'est une mauvaise idée, ou, bien, tout ce qui montre que le problème que vous soulignez est exactement le sujet de ce livre. le point que vous essayez d’exprimer.

Si ce n'est pas dans le livre et qu'ils prétendent que c'est du Java valide ou qu'ils prétendent que c'est lié d'une manière ou d'une autre, alors c'est un livre de merde. C'est peut-être pour ça que je ne le trouve pas en ligne :)

Pour résumer :
  1. Listbd43222e33876353aff11e13a7dc75f6Vous ne pouvez pas créer de Listbd43222e33876353aff11e13a7dc75f6. Vous ne pouvez pas faire ça maintenant. Vous n'avez jamais pu le faire. 1

  2. Listc0f559cc8d56b43654fcbe4aa9df7b4a[] 是白痴。任何代码都不应该这样写。数组有各种各样的缺点。它们的优点很少;它们的优点在这种情况下是无关紧要的,这就是数组确实存在的原因(部分作为低级“粘合剂” - java.util.ArrayList 的实现是用 java 编写的,并在内部使用 Object[] 。有些东西必须- 部分原因是 int[] 目前在空间和时间上确实比 Listc0f559cc8d56b43654fcbe4aa9df7b4a

    Listc0f559cc8d56b43654fcbe4aa9df7b4a[] est un idiot. Aucun code ne devrait être écrit comme ça. Les tableaux présentent divers inconvénients. Leurs avantages sont peu nombreux ; leurs avantages ne sont pas pertinents dans ce cas, c'est pourquoi les tableaux existent (en partie comme "colle" de bas niveau - l'implémentation de 🎜java.util.ArrayList est écrite en Java et utilise 🎜Object [] en interne, quelque chose doit être fait - en partie parce que 🎜int[] est actuellement vraiment plus gourmand en espace et en temps que 🎜Listc0f559cc8d56b43654fcbe4aa9df7b4a Vous ne devriez donc jamais Efficient. écrire une idée stupide, donc tout livre qui explique en profondeur comment la faire fonctionner est... bizarre pour quelqu'un qui a 15 ans de carrière en Java. Cela devrait être une bonne leçon, le cas échéant. C'est comme enseigner le Ford Model T original. boîte de vitesses que cela n'a pas d'importance pour la voiture 🎜

[1]Peut-être autour du JDK25+ Peut-être able - Project Valhalla est l'équipe OpenJDK qui essaie de trouver un moyen de créer des types de données codables similaires aux types de référence standard, mais implémentés et se comportant comme des primitives, et dans le cadre de cela, 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), ce n'est clairement pas possible. Ce n’est que la partie la plus délicate du Valhalla et l’une des millions de raisons pour lesquelles cela pourrait ne jamais se produire. Si vous souhaitez en savoir plus, ou simplement rester informé, Consultez JEP 218 Cette modification a été provoquée par un commentaire de @M.Justin :)

.

[2] « Approprié » est un terme subjectif. Je le définis ici exactement comme je l'attends : zéro avertissement du compilateur, pas besoin de @SuppressWarnings。也可能定义为:在不破坏数组所做的承诺的情况下 - 这也是不可能的(一个“承诺”是数组可以在运行时通过 arrRef.getClass() 告诉您其组件类型.getComponentType()。简单地说,这只能告诉你:我是一个 ArrayList 引用的数组 - 它不能告诉你 ArrayListc0f559cc8d56b43654fcbe4aa9df7b4a。只有 ArrayList.

  1. ArrayListbd43222e33876353aff11e13a7dc75f6 est-il une construction valide ? - Non. En Java, les types génériques ne fonctionnent pas avec les types de données primitifs.

  2. Comment instancier ArrayListc0f559cc8d56b43654fcbe4aa9df7b4a[] correctement ? - Vous pouvez le faire en -

    Listc0f559cc8d56b43654fcbe4aa9df7b4a[] a = new ArrayList[10]; Java ne permet pas de créer un tableau générique, mais vous pouvez simplement créer un tableau d'objets, en l'occurrence une ArrayList. Bien que cela vous avertisse d'une opération non contrôlée ou dangereuse, vous pouvez surmonter ce problème avec @SuppressWarnings annotations.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer