Java整数数组和泛型数组是Java编程中常用的数据结构。整数数组是一种特定类型的数组,只能存储整数类型的数据。而泛型数组是一种更灵活的数组类型,可以存储任意类型的数据。在Java中,我们可以使用整数数组和泛型数组来实现各种功能,如排序、查找、插入、删除等操作。本文将由php小编草莓为大家介绍Java整数数组和泛型数组的基本概念和常用操作,帮助读者更好地理解和应用这两种数组类型。
2022 年版《普林斯顿评论》的“ap 计算机科学 a prep”包含使用以下代码的示例问题:
public class Screen { private ArrayList<int>[] data; . . . }
是否有任何 java 版本 arraylistbd43222e33876353aff11e13a7dc75f6
是有效的构造?我的理解是,在所有情况下都需要是 arraylist979e7f42ea08258251c39ffe96b911f2
。使用 java 17 和 21(这是我的系统上安装的),arraylistbd43222e33876353aff11e13a7dc75f6
会产生 unexpected type
错误。
如果我们将其定义为 arraylist979e7f42ea08258251c39ffe96b911f2[] data
,我们如何正确实例化它?显而易见的解决方案是 data = new arraylist979e7f42ea08258251c39ffe96b911f2[10]
(假设我们想要 10 个 arraylist),但是由于 java 不支持泛型数组,所以在创建 泛型数组时会失败。
我试图了解这本书是否有错误,或者我对 java 的理解是否完全缺乏。谢谢!
没有。绝不。泛型不能包含原始类型,甚至没有一个可以包含原始类型的 Java 版本(如果你曾经可以,你不认为这会是一件大事,特别是它的删除吗?Java 很少破坏向后兼容性!)
不可能。您无法正确实例化它2。拥有非原始类型的数组是没有任何意义的。 List97ed5daf1c40c5076e17fb9aab061ab6>
在所有方面都优于 Listc0f559cc8d56b43654fcbe4aa9df7b4a[]
List97ed5daf1c40c5076e17fb9aab061ab6> 在所有方面都优于
随意的网络搜索找不到这本书的具体内容,你提供的链接也没有找到它(毫无疑问,它很难找到,我认为它受版权保护,而且作者不想要它)无需付费即可轻松访问)。我正在寻找的关键内容在那一章中有一些上下文解释了为什么
这是不可能的,或者这是一个坏主意,或者,好吧,任何表明你正在强调的问题这正是这本书试图表达的观点。如果这不在书中,并且他们要么声称这是有效的 java,要么他们声称它在某种程度上相关,那么它就是一本垃圾书。也许这就是我在网上找不到它的原因:)
总结一下:
Listbd43222e33876353aff11e13a7dc75f6
您无法创建 Listbd43222e33876353aff11e13a7dc75f6。你现在不能这样做。你从来没能做到。1
Listc0f559cc8d56b43654fcbe4aa9df7b4a[]
是白痴。任何代码都不应该这样写。数组有各种各样的缺点。它们的优点很少;它们的优点在这种情况下是无关紧要的,这就是数组确实存在的原因(部分作为低级“粘合剂” - java.util.ArrayList
的实现是用 java 编写的,并在内部使用 Object[]
。有些东西必须- 部分原因是 int[]
目前在空间和时间上确实比 Listc0f559cc8d56b43654fcbe4aa9df7b4a
[1]可能在 JDK25+ 左右可能能够 - Project Valhalla 是 OpenJDK 团队,正在尝试找到一种方法来创建可编码的数据类型类似于标准引用类型,但执行和行为类似于基元,并且作为其中的一部分,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)
,这显然不可能。这只是瓦尔哈拉最棘手的部分并且可能永远不会发生的一百万个原因之一。如果您想了解更多相关信息,或者只是了解最新动态,查看 JEP 218.此编辑是由 @M.Justin 的评论带来的:)
[2]“适当”是一个主观术语。我在这里定义它,正如我所期望的那样:编译器的警告为零,不需要 @SuppressWarnings
。也可能定义为:在不破坏数组所做的承诺的情况下 - 这也是不可能的(一个“承诺”是数组可以在运行时通过 arrRef.getClass() 告诉您其组件类型.getComponentType()
。简单地说,这只能告诉你:我是一个 ArrayList
引用的数组 - 它不能告诉你 ArrayListc0f559cc8d56b43654fcbe4aa9df7b4a
。只有 ArrayList
。
ArrayListbd43222e33876353aff11e13a7dc75f6
是有效的构造吗?- 否。在 Java 中,泛型类型不适用于原始数据类型。
我们如何正确实例化 ArrayListc0f559cc8d56b43654fcbe4aa9df7b4a[]
?- 您可以通过以下方式实现 -
Listc0f559cc8d56b43654fcbe4aa9df7b4a[] a = new ArrayList[10];
Java 不允许您创建通用数组,但您可以简单地创建对象数组,在本例中为 ArrayList。虽然这会给您警告未经检查或不安全的操作,但您可以通过 @SuppressWarnings
注释来克服这个问题。
以上是Java 整数数组和泛型数组的详细内容。更多信息请关注PHP中文网其他相关文章!