2011-11-01 55 views
0

我有這個類:的Java迭代HashMap的2級

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

    private Map<String, docInfo> m; 

我要遍歷所有的文檔信息的雙重價值,並改變它:

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

     } 
     } 

它工作正常,問題是,運行時間太長,我認爲我的代碼不適合工作。任何幫助,將不勝感激,

+0

每個'Map'中有多少項?這段代碼被調用了多少次? – MAK

+0

docInfo hashMap的總數是27k,大部分主要的hashmap沒有超過20個對象 – recoInrelax

回答

0

真的應該使用探查器瞭解爲什麼代碼是緩慢的。這比猜測要好。但是,如果我不得不猜測,那麼問題在於非常大的地圖(27K)構建和檢索速度緩慢。默認的哈希表對於27K條目來說太小了,所以在組裝時你會做很多重複哈希。

嘗試

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

,並嘗試探查器讓我們知道哪些線吃週期。