在不使用BiMap的情况下从Hashmap中的值检索键的最有效方法

时间:2015-10-20 20:22:29

标签: java

我计算文件中的单词,然后将单词及其各自的计数加载到哈希映射中。我已经对值进行了排序,并使用它来检索我的密钥:

public static String getKey(TObjectIntHashMap<String> hash, int value){
    for(String s: hash.keySet()){
        if(value == hash.get(s)){
            key = s;
            hash.remove(key);
            return key;
    }
}

我知道这是一种非常难看的方式,但这是我能够开始工作的唯一方式。我完全知道bimaps的存在,但不愿意使用它。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

更有效的方法是使用迭代器,因为这样可以避免必须单独查找键和值:

public static String getKey(TObjectIntHashMap<String> hash, int value){
    TObjectIntIterator<String> iterator = hash.iterator();
    while (iterator.hasNext()) {
      iterator.advance();
      if (iterator.value() == value) {
        key = iterator.key();
        iterator.remove();
        return key;
      }
    }
}

答案 1 :(得分:0)

执行此操作的最佳方法是使用guava集合中的Multiset。这是一个简单的代码:

//create multiset
Multiset<String> multiset = HashMultiset.create();

//add some strings
multiset.add("a");
multiset.add("a");
multiset.add("b");

//sort and print
System.out.println(Multisets.copyHighestCountFirst(multiset).entrySet();

有关Multiset的更多信息,请点击此处:

https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#Multiset