2012-03-04 70 views

回答

14

哪裏是在引入新的「偷看」的概念,以一個迭代器在兩個方向的已經很容易滾動的價值?

如果你真的想要的話,你可以只實現兩個微不足道的靜態幫手:

public static <T> T peekNext(ListIterator<T> iterator) { 
    T next = iterator.next(); 
    iterator.previous(); 
    return next; 
} 

public static <T> T peekPrevious(ListIterator<T> iterator) { 
    T previous = iterator.previous(); 
    iterator.next(); 
    return previous; 
} 
+0

所以你是說,這個問題的答案是,有沒有辦法將兩者結合起來沒有我自己的滾動' PeekingListIterator'?你可以很容易地問同樣的「有什麼價值」問題有關'PeekingIterator',但顯然有人在看到它的價值,但由於某種原因省略'PeekingListIterator'。 – 2012-03-04 18:26:09

+5

不能向後移動一個'Iterator',但你可以向後移動一個'ListIterator'。因此'PeekingIterator'提供了不能用普通的'Iterator'複製的功能,但是每個'ListIterator'都可以用來獲得'PeekingListIterator'的相同功能。 – 2012-03-04 18:58:35

+0

@LouisWasserman這是一個非常好的點+1。所以直接回答Kevin的問題,在這種情況下,價值在於客戶代碼的可理解性。從客戶的角度來看,'next = iterator.peekAtNext()'比'next = iterator.next()更容易理解。 iterator.previous();'。 – 2012-03-05 15:01:56

相關問題