首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么java中的集合有int索引?

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

Stack Overflow用户
提问于 2012-12-07 16:21:42
回答 2查看 403关注 0票数 11
代码语言:javascript
复制
ArrayList(int initialCapacity)

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

难道不可能有int的情况下,不够,并且可能需要而不是范围的int

更新: Java 10或其他版本必须为此开发新的集合框架。由于在当前集合中使用long会导致破坏,即向后兼容性。难到不是么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-07 16:22:23

理论上可以这样做,但目前这种大型数组(索引超出整数范围的数组)不受JVM的支持,因此ArrayList也不支持这一点。

有必要吗?这本身并不是问题的一部分,但似乎提出了很多问题,所以无论如何我都会讨论它。简单来说,在大多数情况下,答案是否定的,但在某些情况下,答案是肯定的。int在Java中的上限值是2,147,483,647,超过20亿。如果这是我们正在讨论的一个字节数组,那么就我们可以存储在数组中的字节数量而言,上限略高于2GB。早在Java诞生的时候,对于一台典型的机器来说,内存比Java少一千倍,这显然不是什么大问题--但现在,即使是低端(台式机/膝上型电脑)也有更多的内存,更不用说一台大型服务器了,显然它不再是一个任何人都无法触及的限制。(是的,我们可以将字节打包到包装器对象中,并生成一个数组,但这不是我们要解决的问题。)如果我们切换到long数据类型,那么这就将字节数组的上限推到了9.2eB以上(超过90亿GB)。至少在可预见的未来,这使我们坚定地回到“我们不需要明智地担心这一限制”的领域。

那么,Java是在做这个改变吗?Java10的计划之一是解决“大数据”问题,其中很可能包括对基于long索引的数组的支持。显然,这是很长的路要走,但甲骨文至少是想起来

对于JDK 9来说,这是一种让Java虚拟机(JVM)虚拟机管理程序能够感知并提高其性能的举措,而JDK 10可以为较大的数据集从32位移动到64位可寻址数组。

理论上,您可以通过使用自己的集合类(使用多个数组来存储数据)来解决这一限制,从而绕过int的隐式限制--因此,如果您现在确实需要此功能,这在某种程度上是可能的,只是目前比较混乱。

在向后兼容性方面,如果这个特性出现了呢?显然,您不能仅仅将所有的int转换为long,需要有更多的模板,并且,取决于实现选择,甚至可能是这些大型集合的新集合类型(考虑到我怀疑它们是否会进入大多数Java代码中,这很可能是最好的选择)。无论如何,重点是,虽然向后兼容性当然是一个关注,但有许多潜在的方式围绕这一点,所以它不是一个显示停止的任何延伸的想象力。

票数 13
EN

Stack Overflow用户

发布于 2012-12-07 16:33:27

实际上,集合(如Array lists )暂时只支持int值,但是如果您想绕过这个约束,您可以使用Maps和Set,其中键可以是您想要的任何内容,因此,您可以拥有任意数量的条目。但是我个人认为int值对于数组这样的结构来说已经足够了,但是如果我想得到更多,我认为我会使用Derby表,在这种情况下数据库变得更有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13766939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档