gpt4 book ai didi

java - 如果索引范围为 long,则迭代数组

转载 作者:行者123 更新时间:2023-12-02 02:17:34 26 4
gpt4 key购买 nike

如何在 Java 中迭代数组/列表。如果索引范围很长。由于数组/列表仅接受位置索引中的整数。

例如

long arr[]=new long[5];
for(long i=0l;i<5l;i++)
arr[i]=i; // throw an error as arr[i] only accept integer

这里arr[i]会抛出一个错误,因为i是long类型,并且数组在索引位置将输入作为integer

谁能帮我解决这个问题吗?

最佳答案

数组的大小限制1Integer.MAX_VALUE所以数组索引是 long没有任何意义。

一个List可以有超过Integer.MAX_VALUE元素,但索引它会出现问题,因为 List::get需要 int论证。

因此,对于非常大的数据结构,您将很难使用数组或列表(使用 List 实现)。

解决方案...如果您确实需要一个...将实现您自己的 List具有重载或公开大小和索引操作的替代方法的类。这绝非小事。

另一种(可能更简单)的方法是代表您的 long[]作为long[][]并映射下标。

最后,如果您使用 long不必要地作为下标(即索引不需要超出 Integer.MAX_VALUE ),那么:

   long arr[] = new long[5];
for (long i = 0l; i < 5l; i++) {
arr[(int) i] = i;
}
<小时/>

1 - 这是理论最大大小。 1) 您可能会得到OutOfMemoryError如果您尝试分配那么大的数组。 JVM 至少需要length * size(<type>)用于分配 <type> 数组的可用连续存储字节数长度length ,其中size(<type>)是原始类型或引用的大小。 2) 在 32 位 JVM 中,您还受到地址空间维度的限制。 3) 在最近的 Hotspot JVM 中,您可以分配的最大数组实际上是 Integer.MAX_VALUE - 5元素:参见Do Java arrays have a maximum size?

关于java - 如果索引范围为 long,则迭代数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49069028/

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