gpt4 book ai didi

java - ArrayList 可以包含比 int 的最大值更多的元素吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:35:52 30 4
gpt4 key购买 nike

我正在测试 Java (SE7) 如何通过以下代码处理超过其最大值的 int:

int index = 2147483647;//the maximum value of int
long size = 2147483648L; //More than the maximum value of int by 1
int safeCounter=0; //To prevent the infinite loop
while (index<size)
{
System.out.println("Index now is : "+index);//show the int value
index++; //increment the int value
safeCounter++; //increment the number of desired loops
if (safeCounter==3){
break;//to break the loop after 3 turns
}

}

我得到的是:

索引现在是:2147483647索引现在是:-2147483648索引现在是:-2147483647

所以在对此感到困惑之后,(如果我不使用 safeCounter 它将永远在 int 的最大值和最小值之间运行 - - 并且没有抛出异常)我想知道 ArrayList 将如何处理元素数量超过 int 最大值的情况(假设堆空间是没什么大不了)?如果 ArrayList 不能处理这个,是否有其他数据结构可以?


您能否也解释一下我从 int 变量中得到的行为?

最佳答案

Can an ArrayList contain more elements than the maximum value of int?

在实践中没有。 ArrayList 由单个 Java 数组支持,数组的最大大小为 Integer.MAX_VALUE

(假设,Oracle 可以重做 ArrayList 的实现,以在不破坏用户代码的情况下使用数组数组。但他们这样做的机会非常小。)

LinkedList 可以处理您在内存中表示的尽可能多的元素。或者您可以实现自己的列表类型。事实上,您甚至可以实现一个列表类型,它可以容纳比您在内存中存储的元素更多的元素……如果您的列表实际上是一个生成器,甚至可以容纳无限数量的元素。

size() 返回 int 结果(等等)这一事实实际上并不是障碍。 List API 规范处理了这种异常情况。


您的代码的行为得到了简单的解释。 Java 中的整数运算有静默溢出。如果将整数类型的最大正值加 1,它会回绕到最大负值;即 MAX_VALUE + 1 == MIN_VALUE ... 对于整数类型。

关于java - ArrayList 可以包含比 int 的最大值更多的元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392785/

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