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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果索引范围为long,则迭代数组相关的知识,希望对你有一定的参考价值。

如何在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]将抛出一个错误,因为我是long类型,数组在索引位置输入integer

任何人都可以帮我解决这个问题吗?

答案

数组上的大小limit1是Integer.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?

另一答案

即使你的数组​​包含long,你也不需要索引为long's。将其更改为

for(int i = 0; ....)
另一答案

两种解决方案

  1. 通过演员longinteger缩小到arr[(int)i] = i;
  2. i的类型更改为integer并让编译器在分配时为你扩展for(int i = 0; i < 5; i++) arr[i] = i;

由于无法将所有长值映射到整数,因此编译器不会自动缩小变量。由于您可以将所有整数值映射到long,编译器将自动为您扩展变量。

以上是关于如果索引范围为long,则迭代数组的主要内容,如果未能解决你的问题,请参考以下文章

如果两个 object.string 数组在 tableView 上相同,则尝试显示隐藏标签。但我一直让索引超出范围

给出起始索引时,以循环方式查找数组的值

迭代数组并在索引处插入元素

片段(Java) | 机试题+算法思路+考点+代码解析 2023

Day-5: Python高级特性

long类型数字的范围是多大啊?