2014-03-28 94 views
1

如何通過引用對象或特定節點來有效地從Java的LinkedList中刪除節點?使用remove(object)遍歷整個列表,如文檔所證明的:「刪除第一個元素e,使得(o == null?e == null:o.equals(e))」。我可以通過特定的節點去除嗎?我不介意將對節點的引用存儲在對象本身中。我不能使用列表的索引,因爲它可能會改變。如果沒有,是否有另一個數據結構可以讓我做到這一點?通過引用從鏈接列表中刪除Java節點

+0

基本上你想要一個指針給你的節點? – zgc7009

+0

你自己的鏈表?內置的'LinkedList'?如果你自己,這取決於你如何實現它。你有什麼嘗試?你能發佈相關的代碼,並描述你遇到的問題嗎?至於其他數據結構,這取決於您的要求。你必須更具體。 –

回答

2

嘗試使用LinkedHashSet。它基本上是一個HashSet,其元素的確定性排序。或者,您可以將其視爲以元素查找表格支持的LinkedList

我相信remove(Object)操作將是恆定時間。

+0

謝謝,這是非常接近我想要的。然而,當我想通過引用直接訪問時,哈希似乎仍然是一種解決方法。 – user3473949

+0

HashSet不允許重複。你可能想要定義你的equals和hashCode方法。如果互動表現很關鍵,您還需要注意初始能力 – hellboy

2

您可能需要使用HashSet

缺失,插入是一般在固定時間內,通過官方API指出:

這個類提供了基本操作 固定時間性能(添加,刪除,包含和大小),假設散列函數分散在桶中的元素

如果您決定e要使用HashSet,不要忘記覆蓋對象中的equalshashcode方法。

+0

我確實考慮過HashSet,但我需要保留廣告訂單。另外,哈希似乎是一種解決方法,當我想直接通過引用訪問。 – user3473949

+0

在這種情況下,回答@tskuzzy你需要一個'LinkedHashSet'。但哈希不是「解決方法」 – cheseaux