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 ...
随机推荐
- 记账本微信小程序开发四
学习添加组件 集成日期组件 添加组件 需要在main.js文件中,声明一个data值date与wxml中的{{date}}绑定关联,然后在onLoad中初始化字符串格式的日期值, 处理日期组件点击确认 ...
- java学习路线之必会的java基础教程
大数据产业已进入发展的“快车道”,急需大量优秀的大数据人才作为后盾.如果你是Java编程出身,那学习大数据自然是锦上添花:但如果你是刚刚接触大数据技术,还在Java编程基础阶段,这篇文章非常值得你看! ...
- jquery单击事件的写法
方式一: //点击要素,修改URL $(document).on('click',"#modUrlYs" ,function (){ //$("#modUrlYs&quo ...
- button theme
children:[ButtonTheme.bar( child:ButtonBar( children:[ FlatButton... ], ),), ]
- vim自动补全头注释与说明
做个笔记吧. .vimrc autocmd BufNewFile *.c,*.cpp,*.sh,*.py,*.java exec ":call SetTitle()" " ...
- mysql 5.7 运维命令
MySQL安装 1)卸载旧版本 a) 停掉mysql #pkill -9 mysqld b) 查看rpm包 # rpm -qa|grep -i mysql c) 删除 #yum -y remove m ...
- vue--数据显示模版上
首先需要知道 挂载点:是index.html文件下的一个dom节点 模板:挂载点里的内容,也就是模板内容. 组件: 页面上的某一部分内容.当我们的项目比较大时,可以将页面拆分成几个部分,每个部分就是一 ...
- spring-cloud-config-server——Environment Repository(Git Backend)
参考资料: https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.4.0.RELEASE/single/spring-cl ...
- SpringMVC 拦截器HandlerInterceptor(一)
HandlerInterceptor 接口: 进入 Handler方法之前执行比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行 boolean preHandle(HttpS ...
- openssh升级,打补丁
以Root用户上传升级包至/home/dou/system openssh-7.5p1.tar.gz openssl-1.0.2l.tar.gz zlib-1.2.11.tar.gz l 安装所需包 ...