2016-08-16 56 views
-2

从我所了解的情况来看,两者都用于返回不可修改的对象,但为什么会使用另一个呢?返回一个Iterator和一个不可修改的列表有什么区别?

编辑:我的错误,迭代器不是不可修改的。但我仍然不清楚为什么可以使用迭代器而不是List。

+1

你能解释列表和迭代器之间的区别吗? – chrylis

+0

您可以通过比较['Iterator'](https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html)和['List'](https:// docs.oracle.com/javase/8/docs/api/java/util/List.html)接口。 – shmosel

+0

迭代器不是不可修改的,每次调用next()时,您都可以得到不同的结果,并且最终在结束时可能会失败。 –

回答

1

当您需要列表时,返回List;当需要迭代器时返回Iterator。它们是完全不同的数据结构,用于不同的目的。

另外,Iterator也许能够通过remove()方法(它将删除next()返回的最后一个项目)修改基础集合。

编辑(回复OP的编辑):如果您特别想阻止客户端代码查看底层列表,或想要强制按顺序访问元素,则需要返回Iterator。还需要您编写一个iterator()方法,当您的类实现Iterable时返回Iterator。还有一个有趣的情况是返回一个Iterator,它迭代了一个未确定的项目集合,这些项目在请求之前可能甚至不存在于内存中。 (例如,考虑在基于AI的应用程序中进行状态空间搜索。)

+0

我感到困惑的是(不可修改)列表和迭代器之间的差异。一个迭代器只允许你迭代一个列表。一个清单可以做到这一点,更多。 – marizal

+0

@marizal确实如此。那么什么不清楚? – shmosel

+0

返回要么只是给客户端相同的信息,只是比另一个更严格。什么是返回一个比另一个更好的情况的例子? – marizal

相关问题