您的位置:首页 > 其它

迭代器必须要知道的事情

2016-02-25 00:00 253 查看
摘要: 为什么使用,以及怎么使用迭代器做了一些个人看法的表述

迭代器必须要知道的事情

迭代器模式设计的UML图:



我们可以从UML设计图中可以看出:迭代器的场景,对一个集合进行遍历。在只看到遍历的时候很多同学就会说,“强行设计一个遍历的方式,直接用for,加getElement(i)不就搞定了”。但很多时候在设计框架结构的时候,绝对不会只有Arrays<E>这样一个集合类对不?Arrays<E>需要getArray(i),那Lists<E>是不是就需要getList(i),很多时候设计讲究一种对称美,这个时候我们就会思考有没有那么一种可能,两种集合类型获取元素的方式可以一致,这个时候我们遍历同类型集合的时候就非常对称,优雅。

对比一下:
Arrays<String> arrays = new Arrays<String>(10);

Lists<String>lists=new Lists<String>(10);
//遍历方式1
for(int i=0;i<arrays.size();i++){
arrays.getArray(i);
}
for(int i=0;i<lists.size();i++){
lists.getList(i);
}
//遍历方式2
Iterator<String> iterator=arrays.iterator();
while(iterator.hasNext()){
iterator.next();
}
iterator=lists.iterator();
while(iterator.hasNext()){
iterator.next();
}

我们对比上述情况就发现迭代器,其实做到了一种极其优雅对称的方式。

第二个为什要写的原因就是降低耦合度:很多同学英语不好,集合里面的变量命名不规范,假设已经写好一个功能代码遍历用的是for,getShuZu(i);这个时候突然想起来数组的英语该怎么写了,是不是功能代码全部都得该成for,getArray(i)(这个功能是指提供给其他人使用的功能哈),如果是用迭代器模式,是不是只用该迭代器里面的名字,根本不用告诉用了我遍历的同学说我改成了什么,不然你不能用了之类的话。

总结一下:我们用迭代器不是为了强行秀实力,而是对整体框架的把握上使用,对称在设计的时候是最优雅的方式之一。不过我的这个迭代器模式里面没有考虑多线程的情况,后面在《多线程里面必须知道的事情》系列文章专门总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息