Iterator遍历集合特点

2018-05-03  本文已影响0人  sanqi37

Java中使用Iterator来遍历集合元素,Iterator遍历集合元素有以下几个特点:

  1. ** Iterator遍历集合元素的过程中不允许线程对集合元素进行修改,否则会抛出ConcurrentModificationEception的异常。**
  2. Iterator遍历集合元素的过程中可以通过remove方法来移除集合中的元素。
  3. Iterator必须依附某个Collection对象而存在,Iterator本身不具有装载数据对象的功能。
  4. Iterator.remove方法删除的是上一次Iterator.next()方法返回的对象。
  5. 强调以下next()方法,该方法通过游标指向的形式返回Iterator下一个元素。

Iterator的常用方法:

  1. boolean hasNext() ;判断迭代器中是否还有下一个元素,有则返回true
  2. Object next(); 返回迭代器中下一个元素
  3. void remove() ; 删除集合里上一个next方法调用的时候返回的对象元素
  4. 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">

  1. package javaset;

  2. import java.util.ArrayList;

  3. import java.util.Collection;

  4. import java.util.Iterator;

  5. public class MyIterator {

  6. public static void main(String[] agrs) {

  7. Collection mCollection = new ArrayList<String>();

  8. mCollection.add("string1");

  9. mCollection.add("string2");

  10. mCollection.add("string3");

  11. mCollection.add("string4");

  12. mCollection.add("string5");

  13. mCollection.remove("string5");

  14. Iterator<String> mIterator = mCollection.iterator();

  15. mIterator.forEachRemaining(object->System.out.println("@"+object ));

  16. //forEachRemaining也是通过调用next方法来遍历迭代器中的元素的,所以在次使用next方法的时候

  17. //游标已经指向了Iterator中的末尾,此时hasNext()方法返回的为false

  18. mIterator = mCollection.iterator();

  19. //需要重新获得Iterator对象,否则在forEachRemaining()方法后调用haxNext()会直接返回false

  20. while (mIterator.hasNext()) {

  21. String temp = (String) mIterator.next();

  22. System.out.println(temp);

  23. if (temp.equals("string4"))

  24. // mCollection.remove(temp);

  25. // 在Iterator遍历集合元素的过程中,一旦集合中的元素被修改,就会抛出ConcurrentModificationException的异常

  26. mIterator.remove();

  27. // 通过Iterator来操作ArrayList中的元素,这里删除的是之前Iterator.next返回的元素

  28. }

  29. System.out.println(mCollection);

  30. }

  31. }

上一篇下一篇

猜你喜欢

热点阅读