我在 java 中有一个 Hashtable,如下所示,我正在尝试获取具有最小值的键。显然我可以遍历所有元素来找到它,但是有没有更简单的方法呢?
Hashtable<Object, Integer> hash= new Hashtable<Object, Integer>();
使用哈希表,不。但是您可以改为使用TreeMap
.
基于红黑树的
NavigableMap
实现。地图根据其键的自然顺序排序,或者由地图创建时提供的 Comparator 排序,具体取决于使用的构造函数。
它有一种方法firstKey()
可以提供您想要的确切功能。
Grr,值,而不是键。不,那么您将需要迭代。
我会说在这种情况下您应该使用单独的地图(Multimap?)来存储反向关联。
Map<Object, Integer> hash= new Hashtable<Object, Integer>();
SortedSetMultimap<Integer, Object> reverse = TreeMultimap.create();
每当你把key
,value
东西放进去hash
,也放进去value
,key
放进去reverse
。然后使用检索最小值reverse.keySet().first()
(此解决方案需要Guava)
您可以使用库函数Collections.min(Collection,Comparator)而不是自己迭代entrySet()
。
样本
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println(
Collections.min(map.entrySet(), new Comparator<Map.Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o1.getValue().intValue() - o2.getValue().intValue();
}})
.getKey()
);
}
也可以通过这种方式找到最小值,
Hashtable h = new Hashtable();
h.put(10, "aaa");
h.put(1, "aab");
h.put(12, "aabwqkjdg");
Set set = h.keySet();
TreeSet treeSet= new TreeSet();
treeSet.addAll(set);
System.out.println("Last :"+treeSet.first());
我只是将键作为整数的例子。
看起来最简单的方法实际上是迭代元素。如果 Hashtable 名称是 hash:
Object minObj= null;
int min= Integer.MAX_VALUE;
for(Map.Entry<Object, Integer> x: hash.entrySet()){
if(x.getValue() < min){
min= x.getValue();
minObj= x.getKey();
}
}