最有效的方式从值检索键在Hashmap不使用BiMap

  • 本文关键字:Hashmap BiMap 检索 有效 方式 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;
    }
}

我知道这样做很难看,但这是我唯一能去工作的方法。我完全知道bimmap的存在,但我不喜欢使用它。什么好主意吗?

稍微有效一点的方法是使用迭代器,因为这样可以避免对键和值进行单独查找:

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;
      }
    }
}

最好的方法是使用番石榴集合中的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多重集

最新更新