簡體   English   中英

一致且高效的雙向數據結構實現(Java)

[英]Consistent and efficient bi-directional data structure implementation (Java)

我需要用Java實現雙向地圖,因此我嘗試使用Guava和Commons中的BiMap和BidiMap。 但是,對元素進行修改后,無法保持反視圖功能。 這是BiMap的示例(與BidiMap的行為相同):

BiMap<Set<String>, Set<String>> map = HashBiMap.create();

Set<String> foo = new HashSet<>();
foo.add("foo");

Set<String> bar = new HashSet<>();
bar.add("bar");

map.put(foo, bar);

map.get(foo); // returns [bar], ok
map.inverse().get(map.get(foo)); // returns [foo], ok

map.get(foo).add("someString");

map.get(foo); // returns [bar, someString], ok
map.inverse().get(map.get(foo)); // returns null, not ok <=

當然,對於使用HashMaps的實現來說,這種行為是可以預期的,但是它說明了問題。

因此,問題是,是否存在一個雙向數據結構可以處理這種情況,並且具有任意類型的元素,並且平均時間復雜度仍然比成對的數組好?

編輯:我不是要解決這個問題或避免它,這更多是一個學術問題。 我只想知道是否存在這樣的數據結構。 即,一種數據結構允許雙向綁定,可變密鑰並具有合理的時間復雜度。

您的麻煩不是雙向映射,而是假設您被允許修改映射鍵。 實際上,從根本上要求鍵至少在其equalshashCode方法(在哈希表支持的映射的情況下)或其比較方法(在二進制樹支持的映射的情況下)的行為方面保持穩定。

也許您可以考慮刪除一個元素,進行更改,然后再將其插入回去,這是滿足實現約束的一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM