今天学习的设计模式之美的迭代器模式,主要分了三篇来讲.
一般情况下,迭代器模式都是一门编程语言提供了,用来遍历基本的数据结构,迭代器模式又被叫做游标模式.
首先对于线性数据结构,已经可以顺序for循环遍历,为什么要设计一个迭代器呢?
因为数据结构除了有线性数据结构还有非线性的,比如Tree和图,对于这些数据结构for循环是实现不了的.
然后迭代器模式抽象为接口,降低了代码的耦合度,提高了可扩展性.
第二节课就是将List为什么会有并发修改异常,我们在遍历迭代器的时候,如果是数组类型,删除了一个元素,为了保证数据结构的一致性,数组中的数据会向前面移动,移动之后呢,那么指针就会发生变化,就有可能迭代器迭代出来重复的元素或者是缺少了元素.
如何实现的呢?
我们想要避免这种情况,有两种解决方式,一种就是迭代器迭代结束前都不允许修改集合,还有一种就是如果你正在迭代的话,发生了修改元素,那么就抛出异常,终止迭代.
在ArrayList里面有modCount就是修改次数,在Itertor里面有一个expectCount,如果用集合的add或是remove方法,modCount变了,用迭代器的时候会发现modCount和ExceptCOunt不一样,那么就会抛出并发修改异常.
但是如果你用迭代器的remove()方法,就会同时修改modCount和exceptCount,下次迭代就不会出现了.
所以我们要使用迭代器的remove()方法,了解了原理,知道并发修改异常就行了.
最后第三节课讨论了一个不存在的场景,争哥想告诉我们什么呢?
就是一篇文章看懂了是没有用了,没有任何收获,如果你思考了,那么就会有一点点的收获,如果你去实践了,你的收获就会多那么一点点,如果你做到了,你才是真正掌握了.
另外就是编程是一门手艺活,要多联系.
想想我们做传统手艺的时候,比如弹琴,唱歌,有老师教的,有上课,上完课之后做什么呢,不就是多练习吗
天天看技术文档,但是如果不练习的话,还是没有掌握这些知识,一方面要多思考,把一些问题当做是面试题去思考,另外就是要练习.多运用到工作当中去.
网友评论