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 ...
随机推荐
- Python取整及保留小数小结
1.int() 向下取整 内置函数 n = 3.75 print(int(n))>>> 3 n = 3.25 print(int(n))>>> 3 2.round ...
- BIOS备忘录之ASL code常用知识点
_HID:device唯一 _STA:决定device在不在(在DM下面能不能看到) _CRS:描述分配给device的资源 _INI:在OSPM加载描述表的时候运行一次(比如,如果要根据不同情况给d ...
- javascript监听按键
document.addEventListener('keydown',test); function test(e){ var x=e.keyCode; if(x == 49){ console.l ...
- [c/c++] programming之路(24)、字符串(五)——字符串插入,字符串转整数,删除字符,密码验证,注意事项
1.将字符串插入到某位置(原字符串“hello yincheng hello cpp hello linux”,查找cpp,找到后在cpp的后面插入字符串“hello c”) 需要用到strstr字符 ...
- Codeforces 528E Triangles 3000 - 计算几何
题目传送门 传送点I 传送点II 传送点III 题目大意 给定$n$的平面上的直线,保证没有三条直线共点,两条直线平行.问随机选出3条直线交成的三角形面积的期望. 显然$S=\frac{1}{2}ah ...
- Linux统计文件中单词出现的次数
grep -E "\b[[:alpha:]]+\b" /etc/fstab -o | sort | uniq -c 或 awk '{for(i=1;i<NF;i++){c ...
- MyBatis进阶(二)
MyBatis之动态SQL 动态SQL之foreach 有时SQL语句where条件是在一个集合或者数组里,需要使用in关键字,这时可以使用foreach动态SQL语句,例如: select * fr ...
- (转载)Unity 关于动态监听时,点击Button,返回其在数组中的下标
其实是绕了一圈,把数组里的元素放进数组列表里再读取它的下标 using System.Collections; using System.Collections.Generic; using Unit ...
- js弹出对话框的三种方式(转)
原文地址:https://www.jb51.net/article/81376.htm javascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prom ...
- Jquery实现轮播效果图
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...