Java iterator()和next()原理用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java iterator()和next()原理用法相关的知识,希望对你有一定的参考价值。
Java iterator()和next()具体是怎么的用法和原理,求高手给个简单的例子,本人初学
如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 TreeSet 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整。比如以后你的代码改了,list不在是list接口了,而是set接口(没有get(i)方法),
这时你的代码改动就大了,for里面全部要重写,而你老大的代码几乎不用任何修改,当然这也牺牲了部分性能
参考资料:http://bbs.csdn.net/topics/250025827
*****************************************希望帮助到你!************************************************
如果我的回答对你有帮助,
请点击我的回答下方【选为满意答案】按钮
谢谢! 参考技术A Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
迭代器应用:
list l = new ArrayList();
l.add("aa");
l.add("bb");
l.add("cc");
for (Iterator iter = l.iterator(); iter.hasNext();)
String str = (String)iter.next();
System.out.println(str);
/*迭代器用于while循环
Iterator iter = l.iterator();
while(iter.hasNext())
String str = (String) iter.next();
System.out.println(str);
*/ 参考技术B public static void fun()
ArrayList<Integer>list=new ArrayList<Integer>();
for(int i=0;i<15;i++)
list.add(Integer.valueOf((int)(Math.random()*100)));
Iterator<Integer> i=list.iterator();
while(i.hasNext())
Integer element=i.next();
System.out.print(element+" ");
//这个的用法,相当于下面的for-each
for(Integer e:list)
System.out.print(e+" ");
参考技术C
Iterator hasNext() ,next(),remove()解析
一、Iterator的API
关于Iterator主要有三个方法:hasNext()、next()、remove()
hasNext:没有指针下移操作,只是判断是否存在下一个元素
next:指针下移,返回该指针所指向的元素
remove:删除当前指针所指向的元素,一般和next方法一起用,这时候的作用就是删除next方法返回的元素
二、迭代器原理
1、当创建完成指向某个集合或者容器的Iterator对象是,这是的指针其实指向的是第一个元素的上方,即指向一个 空
2、当调用hasNext方法的时候,只是判断下一个元素的有无,并不移动指针
3、当调用next方法的时候,向下移动指针,并且返回指针指向的元素,如果指针指向的内存中没有元素,会报异 常。
4、remove方法删除的元素是指针指向的元素。如果当前指针指向的内存中没有元素,那么会抛出异常。
三、迭代器的用途
迭代器一般会用在遍历集合上面。
四、使用中注意的问题
Java中的Iterator是一种fail-fast的设计。
当Iterator迭代一个容器的时候,如果此时有别的方法在更改Collection(容器)的内容,那么Iterator就会抛出
ConcurrentModificationException 。正如官方文档中反复强调的:
Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic
behavior at an undetermined time in the future.
为了避免此Exception的发生,可以采取的解决方法是:
1.如果当前单个线程在更改容器(add, delete....),那么迭代的时候采用iterator.remove()方法可以确保迭代器在查找next的时候,指针不会丢失。
while(iterator.hasNext() {
Object item = iterator.next();
iterator.remove(); //Important! 避免ConcurrentModificationException
......
}
2.如果当前有多个线程在对容器进行操作,例如一个线程正在向容器中写数据,而另一个线程在迭代此容器,这时候就必须考虑并发下的线程安全问题。ConcurrentModificationException官方文档第一句就指出:
This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible.
这时候可以采用java.util.concurrent包下面的线程安全的容器解决此异常。
最后要说的是,ConcurrentModificationException应该永远被用于解决一个bug,而不是检查程序的正确性(try...catch...)
原文链接:https://blog.csdn.net/moshenglv/java/article/details/82805718
以上是关于Java iterator()和next()原理用法的主要内容,如果未能解决你的问题,请参考以下文章
用迭代器iterator遍历list中第一条数据和最后一条数据 并判断
用迭代器iterator遍历list中第一条数据和最后一条数据 并判断
java iterator循环遍历集合(比如HashSet)的原理
JAVA中Iterator方法中有两种取值方法,例如Iterator<Student> it = list.iterator();