我正在努力想出一种有效的方法来返回数据结构中值最低的HashMap
中的密钥。除了循环整个HashMap
之外,还有一种快速有效的方法吗?
例如,如果我有一个如下所示的hashmap:
1: 200
3: 400
5: 1
我想要退回钥匙,5。
答案 0 :(得分:5)
不,你必须遍历HashMap
中的所有键才能找到最小的键。如果这是一项重要操作,您最好使用SortedMap
,例如TreeMap
,它会按顺序保留其元素,然后您只需调用firstKey()
即可找到最低的关键。
答案 1 :(得分:2)
不,没有快速有效的方法 - 你需要遍历整个哈希映射。原因是哈希映射中的键和值没有观察到任何特定的顺序。
答案 2 :(得分:2)
不,没有办法做到这一点。您需要迭代HashMap中的所有元素以找到具有最低值的元素。
我们拥有不同类型存储的原因是它们支持不同类型的操作,效率不同。 HashMap不能根据其值有效地检索元素。您需要的存储类类型取决于您需要快速执行的其他操作。假设您可能还希望能够根据键快速检索项目,则可能会有以下情况:
答案 3 :(得分:2)
正如其他人所提到的那样HashMap
本身并未提供此内容。
因此,您可以选择按需计算或预先计算。
要按需计算,您需要迭代HashMap.entrySet()
根据地图的大小,其变化频率和要求key-with-lowest-value
的频率,预计算(缓存)可能更有效。如下:
class HashMapWithLowestValueCached<K, V extends Comparable> extends HashMap<K, V> {
V lowestValue;
K lowestValueKey;
void put(K k, V v) {
if (v.compareTo(lowestValue) < 0) {
lowestValue = v;
lowestValueKey = k;
}
super.put(k, v);
}
K lowestValueKey () { return lowestValueKey; }
}
答案 4 :(得分:1)
不,因为否则会在O(n log n)中存在排序算法(尽管是概率的):将所有元素添加到哈希映射中,而不是逐个提取最低元素。