[英]STL-like Java Red-black tree / TreeSet/Map and linked lists with non fail-fast/safe iterators
我正在尋找一個帶有紅黑樹和鏈接列表實現的庫,該實現提供不會快速失敗的迭代器。 我希望具有與使用STL在C ++中相同的功能,即:
此實現將是不錯的選擇,因為它可以在使用列表/樹的一部分時對其進行修改。 這里有些例子:
我還希望該庫/源代碼/實現具有一些對Apache / GPL友好的許可證並且相當可擴展(因此,我可以自行修改以實現某些操作,例如上面示例中的操作)。
如果沒有這樣的庫,是否還有其他庫可以幫助我自己實現這兩個數據結構?
這些都很容易實現。 迭代器必須做三件事:
僅存儲兩個引用,一個存儲到“當前”元素,另一個存儲到外部容器對象(用於存儲根引用(樹)或頭/尾引用(列表)的Blob)。
能夠確定所引用的元素是否有效(很容易,如果父指針為空(樹)或上一個/下一個指針為空(列表),則最好是樹的根或列表的頭/尾)。 在無效的迭代器上嘗試執行任何操作時,都會拋出異常。
能夠找到prev / next元素。
有一些陷阱:對於列表,有效地支持java.util.ListIterator的nextIndex()和prevIndex()會很痛苦,當然,現在您遇到了處理並發修改的問題! 這是一個可能如何變壞的示例:
while (it.hasNext()) {
potentially_delete_the_last_element()
it.next() // oops, may throw NoSuchElementException.
}
避免這種情況的方法是永遠不要在檢查列表是否具有next / prev和實際檢索next / prev之間修改列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.