繁体   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