2015-06-23 67 views

回答

2

可迭代

IterableInterface,我们需要为iterator()方法提供实现。在MyIterator类的

public class MyCollection<E> implements Iterable<E>{ 

    public Iterator<E> iterator() { 
     return new MyIterator<E>(); 
    } 
} 

实施骨架:

public class MyIterator <T> implements Iterator<T> { 

    public boolean hasNext() { 

     //implement... 
    } 

    public T next() { 
     //implement...; 
    } 

    public void remove() { 
     //implement... if supported. 
    } 
} 

使用MyCollection泛型,并用新的for循环

public static void main(String[] args) { 
    MyCollection<String> stringCollection = new MyCollection<String>(); 

    for(String string : stringCollection){ 

    } 
} 

为了您的第二个问题,输出讲,内环每次都会从头开始循环。

public static void main(String[] args) { 
     List<String> names = new ArrayList<String>(); 
     names.add("a1"); 
     names.add("a2"); 

     for (String itemA : names) { 
      for (String itemB : names) { 
       System.out.println("Inner => " + itemB); 
      } 
      System.out.println("Outer => " + itemA); 
     } 
    } 

Inner => a1 
Inner => a2 
Outer => a1 
Inner => a1 
Inner => a2 
Outer => a2 

审阅this的例子

1

anIterable.iterator()应该返回一个新的迭代,并在这种情况下按预期的方式嵌套增强的for循环会工作。 Iterable的所有标准实现在调用iterator()时返回一个新的迭代器。

如果Iterable接口的某些错误实现在连续调用iterator()时未返回新的Iterator,则嵌套的增强for循环将中断。

顺便说一下,Iterable的Javadoc的iterator()方法并不要求它返回一个新的迭代器。

0

您可以并行迭代相同的集合,但不能修改它。所以你的代码是完全正确的:每次都会返回新的iterator

2

Iterable<T>是一个接口,所以没有默认的实现。

ArrayList<T>例如,iterator<E>方法将返回嵌套类Itr每次调用的新实例:

public Iterator<E> iterator() { 
    return new Itr(); 
} 
0

取决于如何可迭代的接口被实现。通常,集合frameworl类将返回新实例。