我有一个清单:
List<Object> myList = new ArrayList<Object>();
要从此列表中获取,有两种方法:
1
for(Object obj : myList )
{
// some code
}
2
Iterator<Object> objIt = myList.iterator();
while(obj.hasNext()) {
Object obj = (Object)objIt.next();
// some code
}
我的问题是哪一个内存有效并且快速迭代?
答案 0 :(得分:12)
他们做同样的事情 - 增强的for
循环只是简写版本的语法糖(对于迭代;对于数组,它略有不同)。除非你明确需要迭代器(例如调用remove()
),否则我会使用第一个版本。
有关编译器执行的确切转换的更多详细信息,请参阅section 14.14.2 of the Java Language Specification。
答案 1 :(得分:4)
使用Iterator
可以更加安全地访问定义List
之外的class
,因为您无法意外覆盖整个List
。您一次只能访问一个元素:顶部元素。
因此我们使用的指南是仅在定义类中使用for each
方法,并且每当需要从外部访问List时,必须使用迭代器。这也强制了保持如何修改包含它的class
内的成员的逻辑的概念。外部所需的所有复杂操作都必须在public
内的class
方法中实现。
答案 2 :(得分:2)
第一个是你所谓的“增强for循环”,它是在JDK 1.5 +
中引入的迭代列表是更方便的方法。此外,如果您使用它,则无需进行显式铸件。
从表现的角度来看,我认为两者没有太大区别。
答案 3 :(得分:2)
迭代器:它在需要时为你提供结果,并且不会在内存中获得所有结果
答案 4 :(得分:1)
仅在其中使用增强的for循环使用迭代器。所以两者都是一样的。
答案 5 :(得分:1)
第一个更清楚,但如果你想在访问列表时删除元素,你唯一的选择是迭代器。