java中List接口的迭代器问题?

List接口中有两个获取迭代器的方法,分别是iterator和listiterator。两个方法返回的迭代器类型不同,一个是Iterator,一个是L…
关注者
11
被浏览
3,093

4 个回答

有的 List 实现提供有双向迭代能力的 ListIterator 要比提供普通的 Iterator 造成更大的开销(譬如单链表),在这种情况下分开提供两种 Iterator 能够在不需要反向迭代时避免额外的开销。

iterator()是通用迭代接口,而listiterator()只有list才有的迭代接口,设计目标不同。

一个接口的设计需要考虑使用者的使用成本,使用习惯,相应的设计规范与非也是为了减少开发学习成本。

集合基类里定义了接口返回iterator,象set、map、list这些派生类都使用iterator实现也是保证了一致性,如果list实现的iterator实现与其他集合有区别,那么就增加了学习成本。

如果list里合并了listiterator,那么你怎么知道返回iterator还是listiterator,如果是list继承类,编程的成本更高,因为你不去阅读说明根本不知道返回的是iterator还是listiterator。