Java中ListIterator和Iterator详解与辨析 在使用java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的时候可以使用。这两种迭代器有什么区别呢?下面我们详细分析。这里有一点需要明

Java中ListIterator和Iterator的区别以及ListIterator的应用 Iterator和ListIterator主要区别有: 一、ListIterator有add()方法,可以向List中添加对象,而Iterator不能。 二、ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历。但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。 三、ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator 没有此功能。 四、都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。

public class TestListIterator {

public static void main(String[] args){

List list = new LinkedList ();

inits(list);

//Iterator迭代器

System.out.println("1、Iterator迭代器的正向遍历输出=======================");

Iterator it = list.iterator();

//1、正向输出

while(it.hasNext()){

System.out.print(it.next()+" ");

}

//1、正向输出,迭代器只能一次性使用,例如,当上面已经遍历输出一遍之后,下面的遍历就将没有任何输出

//

while(it.hasNext()){

//

System.out.print(it.next()+" ");

//

}

//换行

System.out.println();

System.out.println("=======================");

System.out.println("2、ListIterator迭代器的正向遍历输出=======================");

//ListIterator迭代器

ListIterator lIt = list.listIterator();

//此时在迭代器的最前面添加的,lIt.hasNext还访问不了

lIt.add("C");

lIt.add("Python");

//2、正向输出

while(lIt.hasNext()){

System.out.print(lIt.next()+" ");

}

//换行

System.out.println();

System.out.println("3、ListIterator迭代器的反向遍历输出=======================");

//3、反相输出

while(lIt.hasPrevious()){

System.out.print(lIt.previous()+" ");

}

//换行

System.out.println();

System.out.println("4、ListIterator迭代器的修改元素的应用=======================");

//4、ListIteraor迭代器可以修改元素

for(;lIt.hasNext();){

String str = lIt.next();

lIt.set(str+"heihei");

}

while(lIt.hasPrevious()){

System.out.print(lIt.previous()+" ");

}

//换行

System.out.println();

System.out.println("5、ListIterator迭代器的nextIndex的应用=======================");

//5、测试ListIterator中nextIndex的功能

while(lIt.hasNext()){

int index = lIt.nextIndex();

System.out.println(" "+index);

String str = lIt.next();

if(index == 1){

lIt.set(str+"wuranghao");

}

}

System.out.println("-----------------------");

//输出

while(lIt.hasPrevious()){

String str = lIt.previous();

System.out.print( str + ",");

}

System.out.println();

}

private static void inits(List list) {

list.add("1、Java");

list.add("2、C++");

list.add("3、C#");

}

} 在实现ListIterator中的一些特殊方法时,发现有很多需要我们注意的地方,例如,ListIterator中的add方法,下面将进行详细的介绍。 1、add方法 在我们获取到List的ListIterator迭代器后,直接使用add添加元素,添加元素的位置是当前next元素的前一个元素。 看如下的例子:

list.add("Java");

list.add("C++");

list.add("C#");

ListIterator lIt = list.listIterator();

//此时在迭代器的最前面添加的,lIt.hasNext还访问不了

lIt.add("C");

lIt.add("Python"); 当使用add方法添加元素后,如果使用如下的方法进行输出,结果为:C Python Java C++ C#

for(int i=0;i

while(lIt.hasNext()){

System.out.print(lIt.next()+" ");

} 从结果可以看出,此种情况下,next是没法取得我们刚刚添加进行的元素。 JDK文档对此方法的说明如下: 将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);如果列表没有元素,那么新元素就成为列表中的唯一元素。新元素被插入到隐式光标前:不影响对 next 的后续调用,并且对 previous 的后续调用会返回此新元素(此调用把调用 nextIndex 或 previousIndex 所返回的值增加 1)。 这里就比较好理解了。 还有一些我们需要注意的地方,在使用ListIterator时,这些功能都需要我们进行测试,然后进行使用。

java iter是否存在_Java中ListIterator和Iterator的区别以及ListIterator的应用相关推荐

  1. java堆和客栈_java中堆和栈的区别分析

    堆和栈是java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

  2. java变量存储位置_java 中变量存储位置的区别

    [原文] 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

  3. java 构造方法和成员方法_java中构造方法和成员方法的区别

    展开全部 构造方法是类的一种特殊方法,用于实例化类时给类的一些属性赋初值:成员方法则是e5a48de588b6323131333532363134313032313635333133336132623 ...

  4. java for循环迭代_JAVA中的for-each循环与迭代

    在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable接口(位于java.lang包中),实现这个接口允许对象成为 "fo ...

  5. java list详解_Java 中 list 用法案例详解

    LIST是个容器接口可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数,用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据类型 ...

  6. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  7. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  8. java 基本类型 引用_java中 引用类型 和 基本类型 有何区别?

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newa ...

  9. java构造器详解_Java中关于构造器的使用详解

    这篇文章主要介绍了Java构造器使用方法及注意事项的相关资料,这里举例说明如何使用构造器及需要注意的地方,需要的朋友可以参考下 Java构造器使用方法及注意事项 超类的构造器在子类的构造器运行之前运行 ...

最新文章

  1. CSDN湘苗培优|成长,从走出舒适区开始
  2. org.quartz-scheduler 基础过程
  3. Cygwin编译cef
  4. Python Django 配置admin后台管理类代码示例
  5. 大数据WEB阶段(六)MySql 下载、安装、卸载与配置
  6. 中国农业大学营养与健康研究院诚聘博士后
  7. 树莓派:文本编辑器与文件
  8. php微博自动评论,新浪微博自动评论工具
  9. sap linux系统安装教程,SAP系统安装步骤 --- 46C OR 4.7
  10. 前端js如何实现中文转拼音(重要)
  11. owncloud虚拟机扩容及apt修复
  12. 精华蚂蚁系统(解决旅行商 TSP问题)
  13. 驯服烂代码_驯服业力,SauceLabs和Internet Explorer:揭秘之旅
  14. tipask 问答系统 如何设置第三方一键登录
  15. 阿里视频云web播放器常见问题汇总
  16. 2019年开户难,大陆居民如何在香港的银行开个人账户?
  17. PWN入门(3)覆盖堆栈上的变量
  18. 共鸣(resonance)
  19. 计算机系统漫游:贯穿计算机系统所有方面的重要概念
  20. 笑话之“一头慷慨赴死的猪”。

热门文章

  1. 浅谈一致性Hash原理及应用
  2. 树莓派3B+,我要跑.NET CORE
  3. 实体类的动态生成(二)
  4. Asp.Net Core 2.1+的视图缓存(响应缓存)
  5. asp.net core新特性(1):TagHelper
  6. [深圳/广州]微软SQL技术沙龙分享会(MVP)
  7. 微服务集成——《微服务设计》读书笔记
  8. .NET Core 2.0及.NET Standard 2.0
  9. CentOS上安装SQL Server vNext CTP1
  10. log4j 新建日志 重启_Log4j 动态修改日志级别,不用重启服务器