在 Java 中將 ListIterator 重設為清單的第一個元素
1. 概述
當我們使用 Java 時,有效率地瀏覽集合是一個常見的要求。在處理清單時, ListIterator
介面提供了一個強大的雙向遍歷工具。但是,在某些情況下,需要將ListIterator
重設為第一個元素。
在本教程中,我們將探索在 Java 中將ListIterator
重置到清單開頭的各種方法。
2.問題介紹
像往常一樣,讓我們透過一個例子來理解這個問題。
假設我們有一個字串列表:
List<String> MY_LIST = List.of("A", "B", "C", "D", "E", "F", "G");
然後,我們可以透過MY_LIST.listIterator()
取得MY_LIST
上的ListIterator
,並透過呼叫ListIterator
的next()
方法來迭代列表。
有時,我們可能希望透過要求ListIterator
物件再次指向清單中第一個元素之前的位置來重置 ListIterator 對象,因為它是新建的。
接下來,我們將研究解決此問題的不同方法。此外,我們將利用單元測試斷言來驗證每個解決方案是否給出預期結果。
3. 建立一個新的ListIterator
我們知道,當我們建立一個新的ListIterator
物件時,它指向目標清單的開頭。因此,重置ListIterator
實例的最簡單方法是將變數重新指派給新的ListIterator.
讓我們建立一個測試並驗證這個想法是否按預期工作:
ListIterator<String> lit = MY_LIST.listIterator();
lit.next();
lit.next();
lit.next();
lit.next();
lit = MY_LIST.listIterator();
assertFalse(lit.hasPrevious());
assertEquals("A", lit.next());
如上面的測試所示,在建立ListIterator
lit
後,我們呼叫lit.next()
方法四次。當我們想要重置lit
時,我們建立了一個新的ListIterator
實例並將其重新指派給lit.
然後,我們透過兩個斷言來驗證lit
是否重置成功:
-
lit.hasPrevious()
回傳false
-
lit.next()
應該是MY_LIST
中的第一個元素 (“A”
)
如果我們執行這個測試,它就會通過。因此,創建一個新的ListIterator
解決了我們的問題。
4. 向後迭代到列表的開頭
建立一個新的ListIterator
可以快速導航到清單的開頭。但是,我們將有一個新的ListIterator
物件。
有時,我們想要保留原始的ListIterator
物件並將其指標移回目標清單的開頭。如果是這種情況,我們可以利用ListIterator
的雙向迭代功能向後迭代到列表的開頭。
接下來,讓我們建立一個測試來看看如何實現這一目標:
ListIterator<String> lit = MY_LIST.listIterator();
lit.next();
lit.next();
lit.next();
lit.next();
while (lit.hasPrevious()) {
lit.previous();
}
assertFalse(lit.hasPrevious());
assertEquals("A", lit.next());
正如我們所看到的,我們透過while
循環應用向後迭代。
如果我們運行測試,它就會通過。所以,它完成了工作。
值得注意的是,由於此方法從當前位置向後迭代到清單的開頭,因此如果清單中的元素數量很大,則速度可能會很慢。
5. 結論
在本文中,我們探索了兩種將ListIterator
重置到清單開頭的方法。
如果需要保留原來的ListIterator
實例,我們可以向後迭代到列表的頭部。否則,建立一個新的ListIterator
將是最直接的解決方案。
與往常一樣,範例的完整原始程式碼可在 GitHub 上取得。