(一)iterator迭代器

Collection的iterator方法返回一个实现了一个Iterator接口的对象

Iterator接口中包含三个方法:

1)E next()

2)boolean hasNext()

3)void remove

具体用法:

Iterator<Integer> integers=collection.iterator();
while(integers.hasNext()){
System.out.print(integers.next()+" ");
}

可以通过调用hasNext()判断是否达到集合的末尾

调用next()方法返回访问到的元素

但是也可以通过foreach循环实现上述的方法

for(Integer i:collection){
System.out.print(i+" ");
}

编译器简单的将foreach循环翻译为带有迭代器的循环

foreach使用是有条件的,即其必须和实现了Iterable接口的对象一起工作,Collection接口扩展了Iterable接口,所以集合可以使用foreach循环

Iterator的作用:能够将遍历序列与序列底层的结构分开,通过它统一了对容器的访问

public class AddingGroups {
public static void display(Iterator<String>iterator){
while(iterator.hasNext()){
String s=iterator.next();
System.out.print(s+" "+" ");
}
System.out.println();
}
public static void main(String[] args) {
List<String> list1=new ArrayList<>(Arrays.asList("a","b","c"));
List<String> list2=new LinkedList<>(Arrays.asList("d","e","f"));
Set set1=new HashSet<>(Arrays.asList("g","h","i"));
Set set2=new TreeSet<>(Arrays.asList("j","k","l"));
display(list1.iterator());
display(list2.iterator());
display(set1.iterator());
display(set2.iterator());
}
}

通过iterator可以不管集合的类型信息了

(二)ListIterator迭代器

List迭代器继承Iterator,有更强大的功能,但是其有限制条件,它只能用于各种List的访问

ListIterator扩展的功能:

1)双向移动

2)可以通过nextIndex()和previousIndex()方法返回当前位置的前一个和后一个元素的索引

3)可以通过set()方法修改访问过的元素

4)通过调用listIterator(n)方法创建一个一开始就指向列索引为n的元素处的ListIterator

具体作用通过代码来演示,如下:

public class ListIterator {

    public static void main(String[] args) {
String[] s={"a","b","c","d","e","f","g","h","i"};
List<String>list= Arrays.asList(s);
java.util.ListIterator<String> it= list.listIterator();
while(it.hasNext()) {
System.out.println(it.next()+", "+it.nextIndex()+", "+it.previousIndex()+"; ");
}
System.out.println();
while(it.hasPrevious()){
System.out.print(it.previous()+" ");
}
System.out.println();
System.out.println(list);
//指向索引位置为3的地方
it=list.listIterator(3);
while(it.hasNext()){
it.next();
//索引位置从3开始的地方将集合内容改为xxx
it.set("xxx ");
}
System.out.println(list);
}
}

  

java中的Iterator和ListIterator的区别的更多相关文章

  1. Java集合类中的Iterator和ListIterator的区别

    注意:内容来自网络他人文章! 最近看到集合类,知道凡是实现了Collection接口的集合类,都有一个Iterator方法,用于返回一个实现了Iterator接口的对象,用于遍历集合:(Iterato ...

  2. 14、Iterator跟ListIterator的区别

    14.Iterator与ListIterator的区别 在使用List,Set的时候,为了实现对其数据的遍历,会经常使用到Iterator(跌代器).使用跌代器,不需要干涉其遍历的过程,只需要每次取出 ...

  3. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  4. java中的sleep()和wait()的区别

    对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监 ...

  5. java中的this与super的区别

    java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...

  6. JAVA中extends 与implements有啥区别?

    JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extend ...

  7. JAVA中String = null 与 String = "" 的区别

    JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...

  8. Java中的throw和throws的区别

    Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws ...

  9. Iterator 与ListIterator的区别

    Iterator 与ListIterator的区别: 1.Iterator能够迭代Set和List集合的元素,而ListIterator只能迭代List集合的元素 2.Iterator只能前向迭代,L ...

随机推荐

  1. MongoExport后的负载均衡问题查询及解决:can't accept new chunks because there are still 2 deletes from previous migration

    问题 前一阵有一个数据导出需求,按照各种数据库的使用方法,使用MongoExport方法导出数据,将数据导出到本地文件系统,在导出之后遇到此问题. 此问题和mongoexport的原理有关,我们知道数 ...

  2. 《CSS世界》读书笔记(四)--宽度分离

    <!-- <CSS世界>张鑫旭著 --> CSS流体布局下的宽度分离原则 所谓“宽度分离原则”,就是CSS中的width属性不与影响宽度的padding/border(有时候包 ...

  3. Python pyYAML模块

    pyYaml模块 一.pyYAML python也可以很容的处理ymal文档格式,只不过取药安装一个模块. 语法例子 注:主要用来做配置文件. 注:需要下载标准库.

  4. dataguard从库数据库丢失恢复例子(模拟所有的控制文件)

    1.退出日志应用模式[oracle@localhost ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Production on Mon Jan 14 ...

  5. overture不同行的音符应该如何连线?

    钢琴初学者在使用overture的时候,碰到不同行中的音符想要将其连线,肯定会疑惑如何来完成这个操作.Overture作为一款钢琴爱好者喜爱的钢琴打谱作曲软件,有着十分强大的功能,下面,我们来看看如何 ...

  6. Learning-Python【34】:进程之生产者消费者模型

    一.什么是生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务,在并发编程中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据.同样 ...

  7. [大数据从入门到放弃系列教程]第一个spark分析程序

    [大数据从入门到放弃系列教程]第一个spark分析程序 原文链接:http://www.cnblogs.com/blog5277/p/8580007.html 原文作者:博客园--曲高终和寡 **** ...

  8. vue--实例化对象

    根目录下的文件,这些是创建vue项目时生成的配置文件 node_modules=> 里面的文件是项目开发过种中的各种依赖,我们暂且不用去深入了解: public=> 主要放的是一些公用的文 ...

  9. 用jQuery实现参数自定义的文字跑马灯效果

    一,明确需求 基本需求:最近在工作中接到一个新需求,简单来说就是实现一行文字从右到左跑马灯的效果,并且以固定的时间间隔进行循环. 原本这是一个很容易实现的需求,但是难点是要求很多参数得是用户可自行设置 ...

  10. ubuntu中可以ping通IP地址但是ping不通域名的问题(www.baidu.com)

    治标不治本的办法:每次开机后执行sudo /etc/init.d/resolvconf restart就可以ping通. 治本方法见原博:https://blog.csdn.net/WFping518 ...