簡體   English   中英

Java樹形結構中的HashMap

[英]HashMap in Tree structure in Java

我正在尋找一個基本上可以像HashMap一樣工作的容器,我可以在其中放置並獲取O(1)時間中的任何條目。 我還希望能夠進行迭代,但是我希望按值對順序進行排序。 所以TreeMapLinkedHashMap都不適合我。 我發現以下示例:

SortedSet<Map.Entry<String, Double>> sortedSet = new TreeSet<Map.Entry<String, Double>>(
        new Comparator<Map.Entry<String, Double>>() {
            @Override
            public int compare(Map.Entry<String, Double> e1,
                    Map.Entry<String, Double> e2) {
                return e1.getValue().compareTo(e2.getValue());
            }});

問題是SortedSet沒有任何get方法來獲取條目。 我將在將要添加條目的地方使用此集合,但是如果已有條目,則將更新value(double),然后使用比較器(如上所述比較值)再次對其進行排序。 我可以用來滿足我的需求嗎?

Java類庫中沒有這樣的數據結構。

但是您可以創建一個作為私有HashMap和私有TreeMap的包裝的具有相同鍵/值對集合的包裝。

這給具有數據結構get的復雜性O(1)像一個普通HashMap (但不put它可在關鍵的順序重復或其他更新操作),以及一鍵設定和條目集...作為原請求這個問題的版本。


這是您的起點:

public class HybridMap<K,V> implements Map<K,V> {
    private HashMap<K,V> hashmap = ...
    private TreeMap<K,V> treemap = ...

    @Override V get(K key) {
        return hashmap.get(key);
    }

    @Override void (K key, V value) {
        hashmap.put(key, value);
        treemap.put(key, value);
    }

    // etcetera
}

顯然,我只實現了一些(簡單)方法。


如果您希望能夠按值順序(而不是鍵順序)對條目進行迭代,那么Java類庫中再也沒有這樣的數據結構。

在這種情況下,如果您需要生成的Map完全符合API合同,則包裝HashMapTreeMap將會非常復雜。

因此,我建議您只使用鍵/值對的HashMap和TreeSet ...並手動使它們保持同步。

暫無
暫無

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

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