2012-03-06 90 views
4

我想了解以下問題,我必須在作業中回答。它詢問無限迭代器。他們會在哪裏有用?我想迭代器被用來通過集合穿越,如:什麼是無限迭代器?爲什麼要使用它?

Iterator itr = ArrayList.iterator(); 
while (itr.hasNext()) 
{ 
    System.out.println(itr.next()); 
} 

一旦itr到達集合的末尾,它的完成,只要沒有其他的操作都必須在迭代中完成的。那麼爲什麼還要用無限迭代器呢?

+2

http://stackoverflow.com/questions/2622591/is -an-infinite-iterator-bad-design 這會回答你的問題。 – Nik 2012-03-06 06:07:13

+1

啊,我不確定這裏的「無限迭代器」的解釋是什麼。如果你需要迭代一個開放式範圍,那麼@NikunjChauhan是正確的。如果你的意思是一個集合的無限迭代器,比如Google Collection庫,PHP和其他一些語言,那麼請看下面! – 2012-03-06 06:19:10

回答

6

一個無限的迭代器完全做你上面的代碼,除了當它碰到結束元素時回退。

也許這個例子將有助於說明它會如何派上用場:

Let l = [1,2,3,4,5,6,7,8] 

int i = 0; 
InfiniteIterator itr = l.infiniteIterator(); 
while(itr.hasNext()) { 
    if(i % 2 == 0) { 
     itr.remove(); 
    } 
    i++; 
} 

在每次迭代的l狀態:

[1,2,3,4,5,6,7,8] # i = 0, e = 1 
[2,3,4,5,6,7,8] # i = 1, e = 2 
[2,3,4,5,6,7,8] # i = 2, e = 3 
[2,4,5,6,7,8] # i = 3, e = 4 
[2,4,5,6,7,8] # i = 4, e = 5 
[2,4,6,7,8] # i = 5, e = 6 
[2,4,6,7,8] # i = 6, e = 7 
[2,4,6,8] # i = 7, e = 8 
[2,4,6,8] # i = 8, e = 2 
[4,6,8] # i = 9, e = 4 
[4,6,8] # i = 10, e = 6 
[4,8] # i = 11, e = 8 
[4,8] # i = 12, e = 4 
[8] # i = 13, e = 8 
[8] # i = 14, e = 8 
[] # while loop exits 
+0

一個很好的例子。 – AHungerArtist 2012-03-06 06:17:40

相關問題