M. *_*awy 5 java heap int arraylist max
我正在测试 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
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的是:
现在的索引是:2147483647 现在的索引是:-2147483648 现在的索引是:-2147483647
因此,在对此感到困惑之后,(如果我不使用safeCounter它,它将在最大值和最小值之间永远保持下去int——并且不会抛出异常)我想知道如何ArrayList处理元素数量超过最大值int(假设堆空间不是问题)?如果ArrayList不能处理这个,还有其他数据结构可以吗?
你能解释一下我从int变量中得到的行为吗?
ArrayList 可以包含比 int 最大值更多的元素吗?
在实践中没有。ArrayList 由单个 Java 数组支持,数组的最大大小为Integer.MAX_VALUE.
(假设,Oracle 可以在ArrayList不破坏用户代码的情况下重做使用数组数组的实现。但他们这样做的机会非常小。)
ALinkedList可以处理您在内存中表示的尽可能多的元素。或者您可以实现自己的列表类型。事实上,你甚至可以实现一个列表类型,它可以容纳比你可以存储在内存中更多的元素……或者甚至是无限数量的元素,如果你的列表实际上是一个生成器。
size()返回int结果(等等)的事实实际上并不是障碍。List API 规范处理这种异常。
简单解释了您的代码的行为。Java 中的整数运算具有无声溢出。如果将整数类型的最大正值加 1,它会环绕到最大的负值;即 MAX_VALUE + 1 == MIN_VALUE ... 对于整数类型。
| 归档时间: |
|
| 查看次数: |
4133 次 |
| 最近记录: |