[英]HashMap in Tree structure in Java
我正在寻找一个基本上可以像HashMap
一样工作的容器,我可以在其中放置并获取O(1)时间中的任何条目。 我还希望能够进行迭代,但是我希望按值对顺序进行排序。 所以TreeMap
和LinkedHashMap
都不适合我。 我发现以下示例:
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合同,则包装HashMap
和TreeMap
将会非常复杂。
因此,我建议您只使用键/值对的HashMap和TreeSet ...并手动使它们保持同步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.