Iterator概述

Iterator - 图1

玩具代码案例 - 字符串的迭代器

String默认是不支持迭代器的,即也不能支持 for each的语法。这里通过一个StringIterable来封装一个支持迭代器的字符串,实现了Iterable接口的类就能支持for each

迭代器类型

StringIterable

  1. package online.javabook.gof.behavioral.patterns3.iterator.characters;
  2. import java.util.Iterator;
  3. public class StringIterable implements Iterable<Character> {
  4. private String original;
  5. public StringIterable(String original) {
  6. this.original = original;
  7. }
  8. public Iterator<Character> iterator() {
  9. return new InnerIterator();
  10. }
  11. // InnerIterator
  12. private class InnerIterator implements Iterator<Character> {
  13. private int index;
  14. public boolean hasNext() {
  15. return index < original.length();
  16. }
  17. public Character next() {
  18. Character c = original.charAt(index);
  19. index++;
  20. return c;
  21. }
  22. public void remove() {}
  23. }
  24. }

控制台输出

Main

  1. package online.javabook.gof.behavioral.patterns3.iterator.characters.app;
  2. import online.javabook.gof.behavioral.patterns3.iterator.characters.StringIterable;
  3. import java.util.Iterator;
  4. public class Main {
  5. public static void main(String[] args) {
  6. StringIterable iterable = new StringIterable("abcdef");
  7. Iterator<Character> iterator = iterable.iterator();
  8. while(iterator.hasNext()) {
  9. System.out.println(iterator.next());
  10. }
  11. System.out.println("----------------------------------------");
  12. for(Character character : iterable) {
  13. System.out.println(character);
  14. }
  15. }
  16. }

Console

  1. a
  2. b
  3. c
  4. d
  5. e
  6. f
  7. ----------------------------------------
  8. a
  9. b
  10. c
  11. d
  12. e
  13. f