ArrayList(int initialCapacity)
和java中的其他集合一起工作 int
指数。
不可能有这样的情况 int
是 不够 可能需要 更多 范围 int
?
更新:
Java 10或其他一些版本必须为此开发新的Collection框架。正如使用 long
目前的收藏品会 打破 该 向后兼容。不是吗?
ArrayList(int initialCapacity)
和java中的其他集合一起工作 int
指数。
不可能有这样的情况 int
是 不够 可能需要 更多 范围 int
?
更新:
Java 10或其他一些版本必须为此开发新的Collection框架。正如使用 long
目前的收藏品会 打破 该 向后兼容。不是吗?
理论上可以,但是目前JVM不支持这样大的数组(索引超出整数范围的数组),因此ArrayList也不支持它。
有必要吗?这不是问题本身的一部分,但似乎提出了很多,所以无论如何我都会解决它。简短的回答是在大多数情况下,不是,但在某些情况下,是的。一个值的上限值 int
在Java中 2,147,483,647
,有点超过20亿。如果这是我们讨论的字节数组,那么就我们可以存储在数组中的字节数而言,上限略微超过2GB。回想一下Java的构思,并且对于典型的机器来说,内存比原本少一千倍,这显然不是一个问题 - 但现在即使是低端(台式机/笔记本电脑)机器也有更多记忆比这更好,更不用说一台大服务器了,所以很明显它不再是一个人无法达到的限制。 (是的,我们可以将字节打包成一个包装器对象并创建一个数组,但这不是我们在这里解决的问题。)如果我们切换到 long
数据类型,然后推动字节数组的上限超过9.2艾字节(超过90亿GB)。这使我们坚定地回到“我们不需要明显担心这个限制”领域至少可预见的未来。
那么,Java正在做出这种改变吗? Java 10的计划之一是解决“大数据”,这可能包括对数组的支持 long
基于索引。显然这还有很长的路要走,但甲骨文至少是这样 考虑此事:
JDK 9的表格是让Java虚拟机(JVM)管理程序感知并提高其性能的举措,而JDK 10可以从32位移动到64位可寻址阵列以获得更大的数据集。
理论上你可以通过使用你自己的集合类来解决这个限制,这些集合类使用多个数组来存储它们的数据,从而绕过了一个隐含的限制。 int
- 所以如果你现在真的需要这个功能,有点可能,目前只是相当混乱。
在此功能进入时,在向后兼容性方面?嗯,你显然不能只改变所有 int
去 long
s,那里需要更多样板,并且根据实现选择,甚至可能是这些大型集合的新集合类型(考虑到我怀疑它们已经找到了进入大多数Java代码的方法,这可能是最好的选择。 )无论如何,关键在于虽然向后兼容性当然是一个问题,但是有很多潜在的方法可以解决这个问题,所以它不是任何想象力的显示阻止。
实际上你是对的,像Array这样的集合目前仅支持int值,但是如果你想绕过这个约束,你可以使用Maps和Sets,其中Key可以是你想要的任何东西,因此,你可以拥有尽可能多的条目。但我个人认为int值对于像数组这样的结构来说已经足够了,但如果我想获得更多,我想我会使用Derby表,在这种情况下数据库变得更有用。