增强的 for 语句如何为数组工作,以及如何获取数组的迭代器?

2022-08-31 13:05:44

给定以下代码片段:

int[] arr = {1, 2, 3};
for (int i : arr)
    System.out.println(i);

我有以下问题:

  1. 上述 for-each 循环如何工作?
  2. 如何在Java中获取数组的迭代器?
  3. 数组是否转换为列表以获取迭代器?

答案 1

如果想要一个 over a array,可以使用其中一个直接实现,而不是将数组包装在 .例如:IteratorList

Apache Commons Collections ArrayIterator

或者,如果你想使用泛型,这个:

com.Ostermiller.util.ArrayIterator

请注意,如果要具有 over 基元类型,则不能,因为基元类型不能是泛型参数。例如,如果你想要一个,你必须使用一个来代替,这将导致大量的自动装箱和 -unboxing,如果它是由 .IteratorIterator<int>Iterator<Integer>int[]


答案 2

不,没有转换。JVM 只是在后台使用索引循环访问数组。

引自 Effective Java 2nd Ed., Item 46:

请注意,使用 for-each 循环不会降低性能,即使对于数组也是如此。实际上,在某些情况下,与普通的 for 循环相比,它可能会提供轻微的性能优势,因为它只计算数组索引的限制一次。

因此,您无法获得数组的 a(当然,除非将其转换为第一个数组)。IteratorList