Iterator遍历集合特点
Java中使用Iterator来遍历集合元素,Iterator遍历集合元素有以下几个特点:
- ** Iterator遍历集合元素的过程中不允许线程对集合元素进行修改,否则会抛出ConcurrentModificationEception的异常。**
- Iterator遍历集合元素的过程中可以通过remove方法来移除集合中的元素。
- Iterator必须依附某个Collection对象而存在,Iterator本身不具有装载数据对象的功能。
- Iterator.remove方法删除的是上一次Iterator.next()方法返回的对象。
- 强调以下next()方法,该方法通过游标指向的形式返回Iterator下一个元素。
Iterator的常用方法:
- boolean hasNext() ;判断迭代器中是否还有下一个元素,有则返回true
- Object next(); 返回迭代器中下一个元素
- void remove() ; 删除集合里上一个next方法调用的时候返回的对象元素
- void forEachRemaining(Consumer action) ;使用Lambdda表达式的形式输出Iterator中所以的元素。注意该方法其实是间接调用next()方法进行遍历,所以再次是next()方法的时候Iterator中的对象已经被遍历完了。
下面是实例代码:
[java] view plaincopy
<embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" name="ZeroClipboardMovie_1" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;" width="16" height="16" align="middle">
<embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" name="ZeroClipboardMovie_2" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;" width="16" height="16" align="middle">
-
package javaset;
-
import java.util.ArrayList;
-
import java.util.Collection;
-
import java.util.Iterator;
-
public class MyIterator {
-
public static void main(String[] agrs) {
-
Collection mCollection = new ArrayList<String>();
-
mCollection.add("string1");
-
mCollection.add("string2");
-
mCollection.add("string3");
-
mCollection.add("string4");
-
mCollection.add("string5");
-
mCollection.remove("string5");
-
Iterator<String> mIterator = mCollection.iterator();
-
mIterator.forEachRemaining(object->System.out.println("@"+object ));
-
//forEachRemaining也是通过调用next方法来遍历迭代器中的元素的,所以在次使用next方法的时候
-
//游标已经指向了Iterator中的末尾,此时hasNext()方法返回的为false
-
mIterator = mCollection.iterator();
-
//需要重新获得Iterator对象,否则在forEachRemaining()方法后调用haxNext()会直接返回false
-
while (mIterator.hasNext()) {
-
String temp = (String) mIterator.next();
-
System.out.println(temp);
-
if (temp.equals("string4"))
-
// mCollection.remove(temp);
-
// 在Iterator遍历集合元素的过程中,一旦集合中的元素被修改,就会抛出ConcurrentModificationException的异常
-
mIterator.remove();
-
// 通过Iterator来操作ArrayList中的元素,这里删除的是之前Iterator.next返回的元素
-
}
-
System.out.println(mCollection);
-
}
-
}