有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

ArrayList(int initialCapacity)

java中的其他集合使用int索引

是否存在int不足的情况,并且可能需要超过int的范围

更新: Java10或其他版本必须为此开发新的集合框架。与当前集合一起使用long打破向后兼容性。不是吗


共 (2) 个答案

  1. # 1 楼答案

    事实上,您是对的,诸如数组列表之类的集合目前只支持int值,但是如果您想绕过此约束,可以使用映射和集合,其中的键可以是您想要的任何东西,因此,您可以拥有任意多个条目。但是我个人认为int值对于像数组这样的结构来说已经足够了,但是如果我想得到更多,我想我会使用Derby表,在这种情况下,数据库会变得更有用

  2. # 2 楼答案

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

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

    那么,Java正在做出这种改变吗?Java10的计划之一是解决“大数据”问题,其中可能包括支持基于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代码,这可能是最好的选择)无论如何,问题是,尽管向后兼容性当然是一个问题,但有许多潜在的方法可以解决这个问题,因此它不会因为任何想象的延伸而成为表演的障碍