代码之家  ›  专栏  ›  技术社区  ›  Yoda ESG

何时使用Iterable,何时使用Iterator?[副本]

  •  -1
  • Yoda ESG  · 技术社区  · 10 年前

    我必须实现类 Incrementer 它假设实现 Iterable 我真的不明白为什么要实施 Iterable<Integer> 而不是 Iterator<Integer> ? 我不仅仅要求解决接口的使用问题。

    为什么采用这种方法 in(int,int) 是静态的吗?

    public class Test {
    
      public static void main(String[] args) {
    
        for(int k : in(1, 10)) System.out.print(k + " ");
        System.out.println();
    
        for(int k : in(1, 10).by(2)) System.out.print(k + " ");
        System.out.println();
    
        for(int k : in(10, 1)) System.out.print(k + " ");
        System.out.println();
    
    
        for(int k : in(1, 10).by(-1)) System.out.print(k + " ");
        System.out.println();
    
        Incrementer inc;
        for (int i : inc = in(1,10) ) {
          if (i == 4) inc.by(2);
          System.out.print(i + " ");
        }
        System.out.println();
        for (int i : inc = in(1,10) ) {
          if (i == 8) inc.by(-2);
          System.out.print(i + " ");
        }
        System.out.println();
        for(int k : inc = in(10, 1)) {
          if (k == 5) inc.by(1);
          System.out.print(k + " ");
        }
    
      }  
    }
    

    输出:

    1 2 3 4 5 6 7 8 9 10 
    1 3 5 7 9 
    10 9 8 7 6 5 4 3 2 1 
    10 9 8 7 6 5 4 3 2 1 
    1 2 3 4 6 8 10 
    1 2 3 4 5 6 7 8 6 4 2 
    10 9 8 7 6 5 6 7 8 9 10
    
    2 回复  |  直到 10 年前
        1
  •  3
  •   Kumar Abhinav    10 年前

    Iterable 类有一个方法 iterator() 返回的实例 Iterator 类,该类可用于迭代对象 迭代器 类实例,可以使用 hasNext() next() 方法迭代类中的元素

        2
  •  1
  •   Vipin    10 年前

    在设计类时,如果我们想提供迭代器功能,我们实现Iterable接口。现在Iterable接口具有方法 Iterator<T> iterator() 所以需要在类中编写迭代器的实现。

    您应该查看集合类(实现集合接口)的源代码,它们具有相同类型的实现。

    所以基本上,您需要使用这两个接口来在类中提供迭代器功能。