根據LinkedHashSet的Javadoc,它將通過內部使用雙向鏈表來保持插入元素的插入順序。高效獲取LinkedHashSet中最近插入的元素
它維護一個雙向鏈表,它貫穿其所有條目。 該鏈接列表定義迭代順序,哪個是哪個元素被插入到該組(插入順序)
如果我想獲取所述第一插入元件,我可以使用代碼像在 順序:
linkedHashSet.iterator().next()
這會給我在O(1)集中的第一個插入的元素。
我想解決一個問題,它需要我訪問O(1)中的最新插入元素,並假設不會有任何重複元素插入到集合中。例如,
linkedHashSet.add(2); // the most recent inserted element in the set is 2
linkedHashSet.add(3); // the most recent inserted element in the set is 3
linkedHashSet.add(5); // the most recent inserted element in the set is 5
linkedHashSet.remove(5); // the most recent inserted element in the set is 3 because 5 is removed and not in the set now
既然是在設置一個雙向鏈表,看來最近的元素應該是雙向鏈表中的最後一個,應該能夠爲O訪問(1)如果有一些API可以獲得它。
我的問題是:在JDK中有沒有辦法做到這一點,或者我需要創建自己的ReversedIteratingLinkedHashSet來做到這一點?基本上,我嘗試爲所有操作找到一個具有O(1)時間複雜度的Set數據結構,包括:插入/刪除/搜索/檢查集合中最近插入的元素。內置的LinkedHashSet似乎很適合內部的非常小的修改,但我不確定這是否可以使用默認的JDK類API完成。
注: 我檢查JDK的源代碼,並知道LinkedHashSet在內部與LinkedHashMap實現,如果有,可以使用LinkedHashMap的訪問最近插入的元素爲O任何解決方案(1),這對我來說是非常有用太。
非常感謝。
請了解我的教程[LinkedHashMap的內部生活](http://volodial.blogspot.com/2013/07/internal-life-of-linkedhashmap-in-java.html)以更好地瞭解LinkedHashSet,因爲後者是隻是前 –
的包裝,我會推薦在這裏使用LinkedHashMap。因爲在插入映射後,您可以通過鍵快速獲取映射。無論如何LinkedHashSet是LinkedHashMap。 –