Java迭代hashmap 2级别

时间:2011-11-01 18:05:39

标签: java iterator hashmap

我有这堂课:

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

        }
        }

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

1 个答案:

答案 0 :(得分:0)

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

尝试

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

并尝试使用剖析器告诉我们哪些线路会循环使用。