我需要在ArrayList上使用迭代器,但每次迭代它时,它都会创建一个Iterator实例(垃圾)。我需要一种迭代列表而不会产生垃圾的方法。
示例:
for (Person person : people) {
person.sayHi();
}
答案 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)
实际上只有两种方法可以迭代列表:
Enhanced for loops只是语法糖,以避免写出代码来制作Iterator
。
答案 2 :(得分:0)
您可以通过编写自己的重用 Iterator 的集合来完成此操作。由于某种原因,Java库不提供替代方法或重用迭代器(可能是因为他们不知道人们会用它们做什么)。
答案 3 :(得分:-1)
您从ArrayList
转换为数组,然后您可以按索引迭代数组。