获取Hashtable中的最小值密钥

时间:2012-10-02 14:57:35

标签: java hash

我在java中有一个Hashtable,如下所示,我正在尝试获取具有最小值的密钥。显然我可以遍历所有元素来找到它但是有更简单的方法吗?

Hashtable<Object, Integer> hash= new Hashtable<Object, Integer>();

4 个答案:

答案 0 :(得分:10)

使用Hashtable,没有。但您可以使用TreeMap

  

基于红黑树的NavigableMap实施。地图已排序   根据其键的自然顺序,或由比较器   在地图创建时提供,具体取决于使用的构造函数。

它有一个方法firstKey(),它提供了你想要的确切功能。


Grr,价值观,而不是关键。不,那么你需要迭代。

我会说在这种情况下你应该使用一个单独的Map(Multimap?)来存储反向关联。

Map<Object, Integer> hash= new Hashtable<Object, Integer>();
SortedSetMultimap<Integer, Object> reverse = TreeMultimap.create();

每当您将keyvalue内容放入hash时,也会将valuekey放入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());

我刚把密钥的例子作为整数。