gpt4 book ai didi

java - 为什么java中的集合有int索引?

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:59 25 4
gpt4 key购买 nike

ArrayList(int initialCapacity)

和 java 中的其他集合在 int 索引上工作。

不会有 int 不够的情况,可能需要 超过 范围的 int?

更新: Java 10 或其他版本必须为此开发新的 Collection 框架。因为将 long 与现有集合一起使用会破坏向后兼容性。不是吗?

最佳答案

理论上可以,但是目前JVM不支持这么大的数组(索引超出整数范围的数组),因此ArrayList也不支持。

有必要吗?这本身不是问题的一部分,但似乎出现了很多,所以我还是会解决它。简短的回答是在大多数情况下,不,但在某些情况下,是的。 Java 中 int 的上限值是 2,147,483,647,超过 20 亿。如果这是我们正在讨论的字节数组,那么就我们可以存储在数组中的字节数而言,上限略高于 2GB。回想 Java 时,典型机器的内存比它少一千倍并不少见,这显然不是什么大问题——但现在即使是低端(台式机/笔记本电脑)机器也有更多内存都比不了,更不用说大服务器了,显然已经不是任何人都可以达到的极限了。 (是的,我们可以将字节打包到一个包装器对象中并制作一个数组,但这不是我们在这里要解决的问题。)如果我们切换到 long 数据类型,那么这将推送字节数组的上限超过 9.2 艾字节(超过 90 亿 GB)。至少在可预见的 future ,这让我们坚定地回到“我们不需要理智地担心这个限制”的领域。

那么,Java 是否做出了这种改变? Java 10 的其中一项计划是解决“大数据”问题,其中很可能包括支持具有基于 long 的索引的数组。显然这还有很长的路要走,但 Oracle 至少是 thinking about it :

On the table for JDK 9 is a move to make the Java Virtual Machine (JVM) hypervisor-aware as well as to improve its performance, while JDK 10 could move from 32-bit to 64-bit addressable arrays for larger data sets.

从理论上讲,您可以通过使用自己的集合类来解决此限制,这些类使用多个数组来存储其数据,从而绕过 int 的隐式限制 - 所以如果您确实需要,这是有可能的现在这个功能,目前只是相当困惑。

就向后兼容性而言,如果此功能出现?好吧,您显然不能将所有 int 都更改为 long,那里需要更多的样板,并且根据实现选择,甚至可能需要新的集合这些大型集合的类型(考虑到我怀疑它们是否会进入大多数 Java 代码,这可能是最好的选择。)无论如何,关键是虽然向后兼容性当然是一个问题,但有许多潜在的解决这个问题的方法,因此无论怎么想,它都不会成为表演障碍。

关于java - 为什么java中的集合有int索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com