我在java中有一个Hashtable,如下所示,我正在尝试获取具有最小值的密钥。显然我可以遍历所有元素来找到它但是有更简单的方法吗?
Hashtable<Object, Integer> hash= new Hashtable<Object, Integer>();
答案 0 :(得分:10)
使用Hashtable,没有。但您可以使用 TreeMap
。
基于红黑树的
NavigableMap
实施。地图已排序 根据其键的自然顺序,或由比较器 在地图创建时提供,具体取决于使用的构造函数。
它有一个方法 firstKey()
,它提供了你想要的确切功能。
Grr,价值观,而不是关键。不,那么你需要迭代。
我会说在这种情况下你应该使用一个单独的Map(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)
答案 1 :(得分:3)
您可以在entrySet()
上使用库函数Collections.min(Collection,Comparator)而不是自己迭代。
<强>样品强>
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()
);
}
答案 2 :(得分:0)
看起来最简单的方法就是迭代元素。如果Hashtable名称是哈希:
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();
}
}
答案 3 :(得分:0)
也可以通过这种方式找到最小值,
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());
我刚把密钥的例子作为整数。