在使用java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,
在使用List、ArrayList、LinkedList和Vector的时候可以使用。首先看一下Iterator和ListIterator迭代器的方法有哪些。Iterator迭代器包含的方法有:
hasNext():如果迭代器指向位置后面还有元素,则返回 true,否则返回false
next():返回集合中Iterator指向位置后面的元素
remove():删除集合中Iterator指向位置后面的元素ListIterator迭代器包含的方法有:
add(E e): 将指定的元素插入列表,插入位置为迭代器当前位置之前
hasNext():以正向遍历列表时,如果列表迭代器后面还有元素,则返回 true,否则返回false
hasPrevious():如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false
next():返回列表中ListIterator指向位置后面的元素
nextIndex():返回列表中ListIterator所需位置后面元素的索引
previous():返回列表中ListIterator指向位置前面的元素
previousIndex():返回列表中ListIterator所需位置前面元素的索引
remove():从列表中删除next()或previous()返回的最后一个元素(有点拗口,意思就是对迭代器
使用hasNext()方法时,删除ListIterator指向位置后面的元素;当对迭代器使用hasPrevious()方法时,
删除ListIterator指向位置前面的元素)
set(E e):从列表中将next()或previous()返回的最后一个元素返回的最后一个元素更改为指定元素e一.相同点
都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用。二.不同点
1.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。
而ListIterator只能用于List及其子类型。2.ListIterator有add方法,可以向List中添加对象,而Iterator不能。3.ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator
有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。4.ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有
此功能。5.都可实现删除操作,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,
不能修改。三:Iterator和ListIterator用法示例ListIterator用法:public class ListIteratorTest {public static void main(String[] args) {// TODO Auto-generated method stubList<String> staff = new LinkedList<>();staff.add("zhuwei");staff.add("xuezhangbin");staff.add("taozhiwei");ListIterator<String> iter = staff.listIterator();String first = iter.next();//删除zhuweiiter.remove();//把zhuwei改为simei//iter.set("simei");System.out.println("first:"+first);iter.add("xiaobai");//遍历List元素System.out.println("遍历List中元素,方法一:");for(String str : staff)System.out.println(str+"   ");iter = staff.listIterator();System.out.println("遍历List中元素,方法二:");while(iter.hasNext()){System.out.println(iter.next());}}}

Iterator和ListIterator区别

List和Set都有iterator()来取得其迭代器。对List来说,你也可以通过listIterator()取得其迭代器,
两种迭代器在有些时候是不能通用的,Iterator和ListIterator主要区别在以下方面:1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator
有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。3. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有
此功能。4. 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,
不能修改。因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。其实,数组对象也可以用
迭代器来实现。Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而
避免向客户端暴露集合的内部结构。例如,如果没有使用Iterator,遍历一个数组的方法是使用索引:for(int i=0; i<array.size(); i++) { ... get(i) ... } 客户端都必须事先知道集合的内部结构,访问代码和集合本身是紧耦合,无法将访问逻辑从集合类和客户端
代码中分离出来,每一种集合对应一种遍历方法,客户端代码无法复用。为解决以上问题,Iterator模式总是用同一种逻辑来遍历集合:for(Iterator it = c.iterater(); it.hasNext(); ) { ... }奥秘在于客户端自身不维护遍历集合的"指针",所有的内部状态(如当前元素位置,是否有下一个元素)
都由Iterator来维护,而这个Iterator由集合类通过工厂方法生成,因此,它知道如何遍历整个集合。客户端从不直接和集合类打交道,它总是控制Iterator,向它发送"向前","向后","取当前元素"的命令,
就可以间接遍历整个集合。

iterator和List的区别

iterator这是一个迭代器,返回的类型是iterator,遍历的效率高,而且做查询的时候iterate()会先到
数据库中把id都取出来。然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中
没有数据,则再查询数据库。iterate会查询2级缓存,iterate()中返回的对象是代理对象。List返回的类型是list,list只会查询一级缓存。list()中返回的List中每个对象都是原本的对象。查询的
时候没遍历一个对象会产生一条sql。Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,
从而避免向客户端暴露集合的内部结构。   例如,如果没有使用Iterator,遍历一个数组的方法是使用索引:
for(int   i=0;   i<array.size();   i++)   {   ...   get(i)   ...   }     客户端都必须事先知道集合的内部结构,访问代码和集合本身是紧耦合,无法将访问逻辑从集合类和客户端代码
中分离出来,每一种集合对应一种遍历方法,客户端代码无法复用。更恐怖的是,如果以后需要把ArrayList更换为LinkedList,则原来的客户端代码必须全部重写。为解决以上问题,Iterator模式总是用同一种逻辑来遍历集合:for(Iterator   it   =   c.iterater();   it.hasNext();   )   {   ...   }  奥秘在于客户端自身不维护遍历集合的"指针",所有的内部状态(如当前元素位置,是否有下一个元素)
都由Iterator来维护,而这个Iterator由集合类通过工厂方法生成,因此,它知道如何遍历整个集合。   Collection   c   =   new   ArrayList();   c.add("abc");   c.add("xyz");   for(Iterator   it   =   c.iterator();   it.hasNext();   )   {   String   s   =   (String)it.next();   System.out.println(s);   }     如果你把第一行代码的ArrayList换成LinkedList或Vector,剩下的代码不用改动一行就能编译,而且功能
不变,这就是针对抽象编程的原则:对具体类的依赖性最小。Iterator 用来遍历 Set 和 List 集合,而 ListIterator 只能遍历 List; Iterator 只可以向前
遍历,而 LIstIterator 可以双向遍历;ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添加一个元素、替换一个元素、
获取前面或后面元素的索引位置。

JAVA中ListIterator和Iterator详解与辨析相关推荐

  1. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  2. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  3. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  4. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  5. Java中的Runtime类详解

    Java中的Runtime类详解 1.类注释 /**Every Java application has a single instance of class Runtime that allows ...

  6. java中properties作用,Java中Properties的使用详解

    Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支 持的配置文件,配置文件中很多变量是经常改变的,这样做也 ...

  7. Java 中的伪共享详解及解决方案

    转载自  Java 中的伪共享详解及解决方案 1. 什么是伪共享 CPU 缓存系统中是以缓存行(cache line)为单位存储的.目前主流的 CPU Cache 的 Cache Line 大小都是 ...

  8. java中list和map详解

    java中list和map详解 一.概叙 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口, List下有ArrayList,Vector,LinkedL ...

  9. stringtokenizer java_基于Java中的StringTokenizer类详解(推荐)

    StringTokenizer是字符串分隔解析类型,属于:Java.util包. 1.StringTokenizer的构造函数 StringTokenizer(String str):构造一个用来解析 ...

最新文章

  1. 从C到C++过渡的3个原因
  2. 研究院引进:博士70万;硕士40万
  3. v-model详细使用
  4. python装饰器实现对异常代码出现进行监控
  5. 虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本。 模块“Upgrade”启动失败。 未能启动虚拟机(修改.vmx文件virtualHW.version = “xx“字段)
  6. Go语言学习资料整理
  7. 活期储蓄账目管理系统
  8. target ajax,jQuery target - jquery事件
  9. 将多张图片转成gif
  10. 【南邮操作系统实验】页面置换算法 (FIFO、LRU、OPT)Java 版
  11. lucas+卡特兰数
  12. java 图片线条_JAVA 关于JFrame的问题,我的图片会被线条给覆盖住,怎样让图片在上面呢...
  13. 强化学习中 on-policy与off-policy 的理解;如何区分on-policy 与 off-policy;RL更新策略、policy结构总结
  14. 优先队列三大利器——二项堆、斐波那契堆、Pairing 堆
  15. Gartner发布2021年隐私技术成熟度曲线,数字伦理登上顶点
  16. 快速搞懂htpp原理
  17. 微信动态二维码管理引流源码/微信活码/自动换群/微信朋友圈加群二维码
  18. 人工智能、机器学习和深度学习的关系
  19. 【Luat-esp32】3.陀螺仪-mpu6050
  20. 【ZCMU1931】wjw的剪纸(dfs)

热门文章

  1. c#转换成vbnet 工具 (源代码)
  2. 数据结构-王道-绪论
  3. linux服务器磁盘扩容的方法
  4. Sublime Text 3118 集成插件汉化定制版——赵亮(碧海情天)
  5. tinyhttpd源码详解
  6. Zend Optimizer 相关报错收集
  7. 2.2 Wrappers访问控制
  8. DBus glib 各数据类型接收与发送详解—C语言(3)
  9. Asp.net Ajax 客户端页面生命周期原生事件
  10. Ibatis 升级 Mybatis