• 循环遍历和迭代器遍历如何选择


      对于数据的遍历,常见的操作方式有两种:循环遍历和迭代器遍历。有时候,我们容易混淆这两种遍历方式,误以为这两种方式并没有根本就没有什么大的区别。

    1.定义

    (1)循环遍历:一般而言,我们常见的while循环、for循环等都是都是循环遍历的主力军。

    (2)迭代器遍历:迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部。迭代出来的元素都是原来集合元素的拷贝。

    2.如何选择是循环遍历还是迭代器Iterator遍历: 

    (1)删除:删除元素的时候,循环中调用集合remove会导致原集合变化导致错误(会导致大小改变),而迭代器的remove方法表现得更为安全(迭代出来的元素都是原来集合元素的拷贝)。     

    (2)访问:采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快;采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素。而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的,可以访问没有顺序的集合 。   

    (4)统一性:使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现,如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,他们的访问算法也不一样。

  • 相关阅读:
    Heritrix源码分析(三) 修改配置文件order.xml加快你的抓取速度
    Heritrix源码分析(四) 各个类说明(二)
    Heritrix源码分析(二) 配置文件order.xml介绍
    Error running Tomcat 6: Address localhost:8080 is already in use
    NLP常用开源/免费工具
    Error: Read from storage 0 bytes, but requested 12 bytes 的解决方法
    Inproc 和 Outproc 的区别
    最搞怪面试问题TOP10:你也来试试看 (大家一起来做题)
    [废弃]想写一个玩魔方的游戏
    C++template中typename 和class有什么区别?
  • 原文地址:https://www.cnblogs.com/xiaomingzaixian/p/9748698.html
Copyright © 2020-2023  润新知