Java中关于Collection接口的迭代器iterator()方法

痛定思痛。 2023-02-27 12:06 131阅读 0赞

关于Collection中的迭代器iterator()方法:

1、Iterator iterator();是一个抽象方法,在集合子类中有重写。

2、这个方法是Collection接口继承了Iterable接口,继承过来的一个方法。

3、该方法返回的是一个Iterator类型接口。

4、每个子类集合中定义了一个私有内部类private class 类名 implements Iterator,已经实现了这个接口。

所以说每个子类可以使用重写的iterator()方法得到一个迭代器对象。

5、通常使用多态这样写:Iterator it = 实例集合对象.iterator();
迭代器接口指向迭代器对象。

子类拿到这个迭代器对象之后,就可以遍历自己集合中的元素。


6、Iterator接口有三个方法:

  • boolean hasNext();
    迭代过程中判断是否还有元素可迭代。
  • Object next();
    返回迭代的下一个元素
  • default void remove();
    在迭代器中删除集合的元素。注意:在迭代过程中不能使用集合自带的remove()方法,会迭代异常。

测试代码:

注意:以下测试代码,迭代方式通用于Collection的所有子类集合,但是,除了Map集合之外。

  1. import java.util.*;
  2. public class Test02 {
  3. public static void main(String[] args) {
  4. // 这里先测试List集合,有序可重复
  5. Collection c = new ArrayList();
  6. //Collection c = new LinkedList();
  7. //Collection c = new Vector();
  8. // 添加几个元素
  9. c.add(1);
  10. c.add(3.14);
  11. c.add("hello");
  12. c.add("hello");
  13. c.add(true);
  14. c.add(new Object());
  15. System.out.println(c.size()); // 6
  16. // 拿到集合的迭代器对象
  17. Iterator it = c.iterator();
  18. // 开始迭代遍历集合
  19. while (it.hasNext()) {
  20. Object obj = it.next();
  21. System.out.println(obj); // 1 3.14 hello hello true java.lang.Object@7cd84586
  22. }
  23. // 再来试一下HashSet集合,无序不可重复
  24. Collection c1 = new HashSet();
  25. c1.add(1);
  26. c1.add(3.14);
  27. c1.add("hello");
  28. c1.add("hello"); // 这个"hello"会存储失败,重复了
  29. c1.add(true);
  30. c1.add(new Object());
  31. System.out.println(c1.size()); // 5
  32. // 获取迭代器
  33. Iterator it1 = c1.iterator();
  34. while (it1.hasNext()) {
  35. Object obj = it1.next();
  36. System.out.println(obj); // 1 3.14 hello java.lang.Object@12edcd21 true
  37. // 我们发现元素不可重复,且取出来的顺序也是乱的
  38. // 注意:集合结构发生改变,迭代器必须重新获取。
  39. // 所以说迭代过程中不能使用Collection的remove()方法,这样会改变迭代器的结构,下一循环迭代就会报异常
  40. // 如果硬要在迭代中删除元素,是可用使用迭代器自己的remove()方法
  41. }
  42. }
  43. }

迭代器遍历方式:

  1. Iterator it = list.iterator();
  2. while (it1.hasNext()) {
  3. Object obj = it1.next();
  4. System.out.println(obj);
  5. }

结论:

集合结构发生改变,迭代器必须重新获取。

迭代过程中不能使用Collection的remove()方法,这样会改变迭代器的结构,下一循环迭代就会报异常。

如果硬要在迭代中删除元素,是可以使用迭代器自己的remove()方法。迭代器自己的删除方法会自动更新迭代器和集合结构。


发表评论

表情:
评论列表 (有 0 条评论,131人围观)

还没有评论,来说两句吧...

相关阅读