列表 vs 列表迭代器

5

我有一个列表:

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
}

我的问题是哪个方法在内存使用上更高效并且迭代速度更快?

你说“for getting that”具体是什么意思? - Sai Kalyan Kumar Akshinthala
1
https://dev59.com/T3I95IYBdhLWcg3w3iHG - Mithun Sasidharan
在提问之前,请使用搜索功能。许多问题已经在 Stack Overflow 上被问过并回答了。重复的问题:https://dev59.com/T3I95IYBdhLWcg3w3iHG - Brian Roach
6个回答

12

它们做的事情是一样的 - 增强型 for 循环只是长手写法的语法糖(对于可迭代对象;对于数组略有不同)。除非你需要显式地使用迭代器(例如调用remove()),否则我会使用第一个版本。

请参阅 Java 语言规范的第14.14.2节,获取编译器执行的确切转换的更多详细信息。


1
我正要给出类似的答案(除了第14部分...)。速度加1。 - Harry Joy
可迭代接口(http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html)是为增强型循环而设计的。只是想指出它们完全相同的参考。 - pimaster

5
使用迭代器(Iterator)提供从定义之外更安全地访问List的方式,因为您不能意外覆盖整个List。例如,您只能每次访问一个元素:顶部元素。
因此,我们使用的指南是仅在定义类内部使用for each方法,并且每当需要从外部访问List时,必须使用迭代器。这也强制实施在包含它的内部保留如何修改成员的逻辑的概念。所有在外部需要的复杂操作都必须在该内的public方法中实现。

2

第一个是所谓的“增强型for循环”,它在JDK 1.5+中被引入。

这是一种更方便的遍历列表的方式。而且,如果你使用它,就不需要进行显式转换。

从性能角度来看,我认为这两种方式没有太大的区别。


2

迭代器:它会在需要时返回结果,而不会将所有结果存储在内存中。


1

强化for循环只在其中使用迭代器。所以两者是相同的。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接