Foreach与迭代器模式的区别

Foreach与迭代器模式的区别

所谓迭代器模式就是一个被大量使用的固定接口,如果我们需要便利一个集合时对元素进行操作的话使用迭代器十分方便。

而Foreach是在Java SE5中出现的一种对集合遍历的句型,也被称作for/in句型,主要用于大部分Collection的遍历(不包括各种Map)和数组的遍历。

  1. Foreach通常用于一次性遍历整个集合,通常不会暂停,大大提升了代码的简洁性和可阅读性。而Iterator可以更好地控制便利过程的每一步。

  2. Foreach在遍历过程中严禁改变集合的长度,进行对集合的删除或添加等操作,而使用Iterator可以在遍历过程中对集合元素进行删除操作。Iterator中的remove()方法只能删除当前迭代器返回的最后一个元素,也就是说,每调用一次next()只能调用一次remove(),如果要在遍历过程中对集合添加元素,需要使用ListIterator,是List专用。

  3. 迭代器模式可以和组合模式一起使用,来控制树状结构的遍历。

  4. Foreach的内部实现是通过迭代器来完成的,实现Iterable接口的类可以使用Foreach句型,Iterable中的iterator()方法返回遍历所用的迭代器。虽然数组也可以使用Foreach句型,但数组并不是Iterable。

  5. Map虽然不能使用Foreach,但可以通过Map.Entry来对Map进行Foreach遍历

    for(Map.Entry entry :map.entrySet()){}

  6. Iterator属于java.util包,Iterable属于java.lang包

猜你喜欢

转载自blog.csdn.net/qq_32916805/article/details/79583665