极客时间11天打卡

2020-04-09  本文已影响0人  随手点灯

今天学习的设计模式之美的迭代器模式,主要分了三篇来讲.

一般情况下,迭代器模式都是一门编程语言提供了,用来遍历基本的数据结构,迭代器模式又被叫做游标模式.

首先对于线性数据结构,已经可以顺序for循环遍历,为什么要设计一个迭代器呢?

因为数据结构除了有线性数据结构还有非线性的,比如Tree和图,对于这些数据结构for循环是实现不了的.

然后迭代器模式抽象为接口,降低了代码的耦合度,提高了可扩展性.

第二节课就是将List为什么会有并发修改异常,我们在遍历迭代器的时候,如果是数组类型,删除了一个元素,为了保证数据结构的一致性,数组中的数据会向前面移动,移动之后呢,那么指针就会发生变化,就有可能迭代器迭代出来重复的元素或者是缺少了元素.

如何实现的呢?

我们想要避免这种情况,有两种解决方式,一种就是迭代器迭代结束前都不允许修改集合,还有一种就是如果你正在迭代的话,发生了修改元素,那么就抛出异常,终止迭代.

在ArrayList里面有modCount就是修改次数,在Itertor里面有一个expectCount,如果用集合的add或是remove方法,modCount变了,用迭代器的时候会发现modCount和ExceptCOunt不一样,那么就会抛出并发修改异常.

但是如果你用迭代器的remove()方法,就会同时修改modCount和exceptCount,下次迭代就不会出现了.

所以我们要使用迭代器的remove()方法,了解了原理,知道并发修改异常就行了.

最后第三节课讨论了一个不存在的场景,争哥想告诉我们什么呢?

就是一篇文章看懂了是没有用了,没有任何收获,如果你思考了,那么就会有一点点的收获,如果你去实践了,你的收获就会多那么一点点,如果你做到了,你才是真正掌握了.

另外就是编程是一门手艺活,要多联系.

想想我们做传统手艺的时候,比如弹琴,唱歌,有老师教的,有上课,上完课之后做什么呢,不就是多练习吗

天天看技术文档,但是如果不练习的话,还是没有掌握这些知识,一方面要多思考,把一些问题当做是面试题去思考,另外就是要练习.多运用到工作当中去.

上一篇 下一篇

猜你喜欢

热点阅读