发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA
1 2 3 下一页 Go 3

Iterator模式

         
2008-09-16 08:53
赞助商链接

JAVA COLLECTION类都提供Iterator模式来迭代的取数据,比如ArrayList最终实现Iterable接口,但是
(一)
for(int i=0,i<size;i++){
a.get(i);
......
}

(二)
Iterator i = a.inerator();
while(i.hasNext()){
......
}

1和2都能遍历list实例a的所有元素,没看出用iterator有什么优势。

起先我的想法就是Iterator提供了List的一个不可变视图,如果你想把List发布给一个方法查看而又不希望这个方法能修改它,则发给给该方法一个List的不可更改视图,但是这个想法有几个问题:
(1)Iterator并非不可改,有remove方法
(2)如果是发布不可变试图的话完全可以用Collections.unmodifyList(a);
(3)如果仅仅是发布不可变视图的话也未必要是Iterator这个形式,试想一下,一个方法的参数是Iterator将是多么晦涩难理解的,我也没见过这个用的。

我的第二个想法是Iterable接口是所有Collection对象都必实现的,也许在List里体现不出优势,在其他集合类里能体现出来,List实现Iterable只是List作为集合类所顺理成章实现的。

到底Iterator的优势在哪里

2008-09-17 08:29

iterator可以向前 向后遍历,是一个指针对象,完全可以用指针来想象它。

iterator借助泛型可以是任何对象,它是一个完全对象式的表达方式,而array是非对象化的,一般不推荐使用。

Iterable接口是所有Collection对象都必实现的,是一个通用功能,这易于编程,否则N时间不用后,我还要想想不同collection该用不同的遍历方式,太麻烦了。这本身就是优点。



2008-09-17 10:37

了解

2008-09-18 07:16

Some clues:
if implements Iterable interface, you can use ***.iterator to get an Iterator.

Isn't that beautiful? A little framework....

2008-09-18 12:58

为什么使用iterator,就是因为用***.iterator 来隐藏***的内部实现。

3Go 1 2 3 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com