列表与列表迭代器

时间:2011-12-07 06:31:20

标签: java list iterator arraylist

我有一个清单:

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
}

我的问题是哪一个内存有效并且快速迭代?

6 个答案:

答案 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)

第一个更清楚,但如果你想在访问列表时删除元素,你唯一的选择是迭代器。