我愿意打赌你可以,如果你可以保证你检查什么,以及你的钥匙是什么类型,是Number
。
这是一个代码示例。排序成本为O(n log(n)),线性搜索为O(n),因此其性能约为O(n log(n))。
public <K extends Number & Comparable<K>, V extends Number> K findSmallestKey(Map<K, V> values, V searchItem) {
// Grab the key set, and sort it.
List<K> keys = new ArrayList<>(values.keySet());
Collections.sort(keys);
for(K key : keys) {
if(values.get(key).doubleValue() == searchItem.doubleValue()) {
return key;
}
}
return null;
}
番石榴offers BiMap
,其可以是更有用真实世界的情况下;但是,如果不覆盖它们,它将不允许存在重复值。
下面是一个例子。
public <K extends Number, V extends Number> K findSmallestKeyWithBimap(BiMap<K, V> values, V searchItem) {
return values.inverse().get(searchItem);
}
这是一个很大的更简洁,并与前一个没有不需要的同类仿制药的(这一个只需要一个Number
,不同时为Number
和Comparable
)。它也不太灵活,并且由于其本质,您明确保证在键和值之间具有一对一映射。
你会更好地通过所有的键进行线性搜索,并记录最大值而无需排序,因为排序将采用'Theta(nlogn)'。 –
[看起来像] [1]你需要一个外部库来用Java来完成它。 [1]:https://stackoverflow.com/questions/1670038/does-java-have-a-hashmap-with-reverse-lookup?rq=1 – Acapulco
@ C.B。那里有一点。 – Acapulco