避免在Java中创建Iterator实例

时间:2015-08-18 02:56:42

标签: java arraylist garbage

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

示例:

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

4 个答案:

答案 0 :(得分:4)

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

如果您坚持使用Java 7或更早版本,则可以执行此操作

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

以下是关于为什么Iterator似乎是在分析器中创建的帖子,但是当您没有运行分析器时就不存在。

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

答案 1 :(得分:2)

实际上只有两种方法可以迭代列表:

  1. 使用索引[为了清晰起见编辑 - ,使用传统的 for循环 ]
  2. 使用迭代器
  3. Enhanced for loops只是语法糖,以避免写出代码来制作Iterator

答案 2 :(得分:0)

您可以通过编写自己的重用 Iterator 的集合来完成此操作。由于某种原因,Java库不提供替代方法或重用迭代器(可能是因为他们不知道人们会用它们做什么)。

答案 3 :(得分:-1)

您从ArrayList转换为数组,然后您可以按索引迭代数组。