避免在 Java 中创建 Iterator 实例

Avoiding creating Iterator instances in Java

我需要在 ArrayList 上使用迭代器,但每次迭代它时,它都会创建一个迭代器实例(垃圾)。我需要一种方法来遍历列表而不产生垃圾。

示例:

for (Person person : people) {
    person.sayHi();
}

实际上只有两种遍历列表的方法:

  1. 使用索引[为清楚起见进行编辑 -- 即使用传统的 for 循环]
  2. 使用迭代器

Enhanced for loops 只是语法糖,可以避免编写代码来制作 Iterator.

您可以通过编写自己的重用 Iterator 的集合来做到这一点。出于某种原因,Java 库不提供替代方案或重复使用的迭代器(可能是因为他们不知道人们会用它们做什么)。

你从ArrayList转换成一个数组,然后你可以通过索引迭代数组。

简单的答案是使用Java 8.这可以使用逃逸分析将Iterator放在堆栈上,从而避免任何垃圾。

如果您卡在 Java 7 或更早的版本上,您可以这样做

for (int i = 0; i < list.size(); i++) {
    Person p = mlist.get(i);

这里 post 解释了为什么 Iterator 似乎是在分析器中创建的,但当您不 运行 分析器时却不是。

http://psy-lob-saw.blogspot.co.uk/2014/12/the-escape-of-arraylistiterator.html