【问题标题】:Java iterate over hashmap 2 levelsJava迭代hashmap 2级
【发布时间】:2011-11-01 18:05:39
【问题描述】:

我有这门课:

    public class docInfo {
        private int freq;
        private HashMap<String, Double> m = new HashMap<String, Double>();
    }

    private Map<String, docInfo> m;

我想遍历所有 docInfo 的 Double 值并更改它:

docInfo documento;

 for (Map.Entry<String, docInfo> entry : m.entrySet()) {
            word = entry.getKey();            
            docs = entry.getValue(); // docs map


            for (Map.Entry<String, Double> entry2 : docs.getM().entrySet()){  

                score = entry2.getValue(); 
                temp = score;

                double log = Math.log10(docs.getFreq());
                double tfw = log+cons;

                docs.changeScoreTo(entry2.getKey(), tfw);
                //entry2.setValue(tfw);

        }
        }

它正在工作,问题是运行时间太长,我认为我的代码不适合这项工作。任何帮助将不胜感激,

【问题讨论】:

  • 每个Map 中有多少项?这段代码被调用了多少次?
  • docInfo hashMap 总大小为 27k,大部分主 hashmap 没有超过 20 个对象

标签: java iterator hashmap


【解决方案1】:

真的应该使用分析器来了解为什么代码很慢。这比猜测要好。但是,如果我不得不猜测,我会说问题在于非常大的地图(27K)构建和检索的速度很慢。默认哈希表对于 27K 条目来说太小了,因此您在组装时要进行大量的重新哈希处理。

试试

private HashMap<String, Double> m = new HashMap<String, Double>(5000);

并尝试使用分析器让我们知道哪些行吃周期。

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 2011-03-21
    • 1970-01-01
    • 2011-03-16
    • 2015-04-13
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多