本帖最后由 java2000_net 于 2008-08-04 22:43:17 编辑

解决方案 »

  1.   

    import java.util.*;class ReversibleArrayList<T> extends ArrayList<T> { //问题1:这里为什么要继承ArrayList?是因为下面要调用它的 iterator 方法?
      public ReversibleArrayList(Collection<T> c) { super(c); }
      public Iterable<T> reversed() {  //问题2:这里为什么要在iterator外面套一个iterable?
        return new Iterable<T>() {
          public Iterator<T> iterator() {
            return new Iterator<T>() {
              int current = size() - 1; //问题3:这里的size()是ArrayList中的方法,为什么这里要 -1呢?
              public boolean hasNext() { return current > -1; }
              public T next() { return get(current--); }
              public void remove() { 
                throw new UnsupportedOperationException();
              }
            };
          }
        };
      }
    } public class AdapterMethodIdiom {
      public static void main(String[] args) {
        ReversibleArrayList<String> ral =
          new ReversibleArrayList<String>(
            Arrays.asList("To be or not to be".split(" ")));
        for(String s : ral)
          System.out.print(s + " ");
        System.out.println();
        for(String s : ral.reversed())
          System.out.print(s + " ");
      }
    }
      

  2.   

    你可以认为current是下标.size指的是元素的数目,下标从0开始,所以要减去1
      

  3.   

    问题一:继承别的类 是因为别的类有能用的 有好用的  我们拿来直接用或者简单的重写就好了
    问题二:Iterable是个接口
    问题三:你不是要倒序输出一个ArrayList吗?当然从最后一个开始了  不要告诉我  你不知道Java是从0开始计数的
      

  4.   

    /问题2:这里为什么要在iterator外面套一个iterable?
    Iterable<T>只是方法的返回类型,你是不是想的太多了?
      

  5.   

    昨天晚上牙疼的太厉害了,所以实在没法去思考问题,今天疼痛少许缓解了。自己分析了下,明白了代码的意思了。第一个问题:确实继承ArrayList类比较合适,因为iterator迭代器既可以直接拿来用,并且还可以使用ArrayList里的各种方法。
    第二个问题:之所以在这里套一个Iterable接口是因为,如果直接写Iterator方法,那么编译器就会调用这个重载的方法了,但是我们希望的是能够进行向前和向后2个功能,所以不能直接写Iterator方法,而是通过调用Iterable来生成一个Iterator以实现Foreach循环。
    第三个问题:这确实是因为,自己没有考虑而出的洋相(昨天晚上,牙实在太疼了应该是过了止痛片的药效,所以没考虑就拿出来问了)。