何时使用Iterable,何时使用Iterator?

时间:2014-03-22 12:24:42

标签: java iterator iterable

我必须实现类Incrementer并且它假设要实现Iterable我真的不明白为什么它应该实现Iterable<Integer>而不是Iterator<Integer>?我不要求解决方案只是使用Interfaces。

为什么方法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 个答案:

答案 0 :(得分:2)

Iterable类有一个方法iterator(),它返回一个Iterator类的实例,可用于迭代对象。一旦有Iterator类实例,你可以使用hasNext()next()方法迭代您班级中的元素

答案 1 :(得分:1)

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

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

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