Java树结构中的HashMap
我正在寻找一个基本上像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方法来获取条目。
我将在添加条目的地方使用此集合,但如果已经存在条目,则将更新值(double),然后使用comparator(如上所述比较值)再次排序。我可以用什么来满足我的需要
# 1 楼答案
Java类库中没有这样的数据结构
但是您可以创建一个,它是私有HashMap和私有TreeMap的包装器,具有相同的键/值对集
这提供了一个
get
复杂度为O(1)
的数据结构,类似于常规的HashMap
(但不是put
或其他更新操作),以及一个可以按键顺序迭代的键集和条目集。。。如本问题原文所要求以下是一个开始:
显然,我只实现了一些(简单的)方法
如果您希望能够以值顺序(而不是键顺序)迭代条目,那么Java类库中同样没有这样的数据结构
在这种情况下,如果需要生成的
Map
完全符合API约定,那么包装HashMap
和TreeMap
将非常复杂所以我建议您只使用一个HashMap和键/值对的树集。。。并手动使其保持同步