java中的Iterator和ListIterator的区别
(一)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的区别的更多相关文章
- Java集合类中的Iterator和ListIterator的区别
注意:内容来自网络他人文章! 最近看到集合类,知道凡是实现了Collection接口的集合类,都有一个Iterator方法,用于返回一个实现了Iterator接口的对象,用于遍历集合:(Iterato ...
- 14、Iterator跟ListIterator的区别
14.Iterator与ListIterator的区别 在使用List,Set的时候,为了实现对其数据的遍历,会经常使用到Iterator(跌代器).使用跌代器,不需要干涉其遍历的过程,只需要每次取出 ...
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例 原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...
- java中的sleep()和wait()的区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监 ...
- java中的this与super的区别
java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...
- JAVA中extends 与implements有啥区别?
JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extend ...
- JAVA中String = null 与 String = "" 的区别
JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...
- Java中的throw和throws的区别
Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws ...
- Iterator 与ListIterator的区别
Iterator 与ListIterator的区别: 1.Iterator能够迭代Set和List集合的元素,而ListIterator只能迭代List集合的元素 2.Iterator只能前向迭代,L ...
随机推荐
- QComboBox列表项高度设置
QComboBox列表项高度设置步骤: 1. 设置代理 QStyledItemDelegate *delegate = new QStyledItemDelegate(this); ui->co ...
- 5、Kafka生产过程分析
1.写入方式 producer采用推(push)模式将消息发布到broker, 每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kaf ...
- Python RabbitMQ RPC实现
远程调用方法:R(remote) P(procedure) C(call) 为了说明如何使用RPC服务,我们将创建一个简单的客户端类. 它将公开一个名为call的方法,它发送一个RPC请求和块,直 ...
- CentOS 6.5安装squashfs-tools
在sourceforge.net网站下载源码包 需要安装的依赖项有zlib-devel.xz-devel.x86_64 修改Makefile文件以支持xz压缩的squashfs文件,去掉Makefil ...
- 在Linux下OpenCV的下载和编译
原理上来说,和windows下没有差别,我们同样使用Cmake-GUI来解决问题. 我们推荐QT和OpenCV全部采用官方的方式重新安装一遍,否则可能会丢失一些模块,而这些都会降低开发效率. 1.参考 ...
- TabBar + TabBarView导航风格
import 'package:flutter/material.dart'; import 'News.dart'; import 'Video.dart'; import 'Chat.dart'; ...
- 【Mac AndroidStudio】download gradle fail问题
第一次运行application时,会发现一直在download gradle,而且进度一直卡着.这时,可以直接拷贝download的链接,粘贴到浏览器下载.下载完了.然后,可以用命令行在用户目录下o ...
- LINQ之路13:LINQ Operators之连接(Joining)
Joining IEnumerable<TOuter>, IEnumerable<TInner>→IEnumerable<TResult> Operator 说明 ...
- Angular2 EventEmitter
可能你对EventEmitter还不太熟悉,不过别担心,它并不难.EventEmitter只是一个帮你实现观察者模式①的对象.也就是说,它是一个管理一系列订阅者并向其发布事件的对象.就是这么简单.来看 ...
- guxh的python笔记一:数据类型
1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...