• for循环和迭代器Iterator


    迭代器模式:
    把访问逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合的内部结构。

    Iterable接口:
    foreach遍历集合的优势在于代码更加的简洁,更不容易出错,不用关心下标的起始值和终止值。
    从本质上说,foreach其实就是在使用迭代器,在使用foreach遍历时对集合的结构进行修改,和在使用Iterator遍历时对集合结构进行修改本质上是一样的。同样会抛出异常,执行快速失败机制。

    在使用Iterator的时候禁止对所遍历的容器进行改变其大小结构的操作。例如,在使用Iterator进行迭代时,如果对集合进行了add/remove操作就会出现ConcurrentModificationException异常。

    RandomAccess
    what is random and sequential access lists?
    java集合类中元素的访问分为随机访问和顺序访问。
    随机访问一般是通过index下标访问,行为类似数组的访问。而顺序访问类似于链表的访问,通常为迭代器遍历。

    ArrayList是典型的随机访问型,而LinkedList则是顺序访问型。
    List接口既定义了下标访问方法,又定义了迭代器方法。因此,其实例既可使用下标随机访问也可以使用迭代器进行遍历,但这两种方式的性能差异很明显。(下标访问比迭代器访问更快)

    for循环与迭代器的对比:
    1、ArrayList对随机访问比较快,而for循环中使用的get()方法,采用的即是 随机访问的方法,因此在ArrayList里for循环更快(foreach是一个内部循环体,多了其它的逻辑,虽然比for循环慢一些,但还是一个量级的);
    2、LinkedList则是顺序访问比较快,Iterator中的next()方法,采用的是 顺序访问方法,因此在LinkedList里只用Iterator更快。
    主要还是依据集合的数据结构不同的判断。

    ArrayList和LinkedList随机访问的区别
    ArrayList是数组结构,随机访问具有常量时间。
    LinkedList是链表结构,随机访问分为两步:
    1)根据index查找Node,通常是一个for循环查找到index对应的Node
    2)返回Node中存储的元素

    ArrayList的下标遍历性能高于LinkedList的下标遍历。

  • 相关阅读:
    Zabbix 添加内存告警
    Oracle Drop 表数据恢复
    Kubernetes port-forward
    Jenkins指定tag发布到k8s环境
    Jenkins系列之六——拉取指定branch或tag
    MySQL5.7 报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement
    docker部署常见应用
    Vim 中进行文件目录操作
    Oracle使用expdp/impdp迁移数据
    UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】
  • 原文地址:https://www.cnblogs.com/barbarian/p/9288509.html
Copyright © 2020-2023  润新知