1
我正在研究一個nGrams,並且我使用嵌套的TreeMap類數據結構來存儲ngrams。 Quadgrams的模板如下所示。如何迭代嵌套的TreeMap而不創建臨時對象
public TreeMap<String, TreeMap<String, TreeMap<String, TreeMap<String, Integer>>>> ngramWordCounter;
當我試圖把它記錄到文件中,基本上我遍歷第一張地圖的密鑰集,然後進入第二等等等等的鍵盤佈局的問題引起的。結果創建了很多臨時對象,並且出現GCOverlimitExceeded錯誤。迭代的代碼片段如下,
for(String key: ((Quadgram)quadgram).ngramWordCounter.keySet())
{
for(String key1: ((Quadgram)quadgram).ngramWordCounter.get(key).keySet())
{
for(String key2: ((Quadgram)quadgram).ngramWordCounter.get(key).get(key1).keySet())
{
for(String key3:((Quadgram)quadgram).ngramWordCounter.get(key).get(key1).get(key2).keySet())
{
//Do something
}
}
}
}
有沒有更好的方式來遍歷此列表而不創建臨時對象?
恰好引用'字符串key'和'字符串value'循環結束後怎麼辦?這些變量需要通過GarbageCollector來實現,因爲Strings確實是對象。 [http://stackoverflow.com/questions/18406703/when-will-a-string-be-garbage-collected-in-java] –
是的引用將被刪除而不是實際的對象。如果你檢查實現,內部TreeMap存儲Entry對象本身。但是所有的處理都在循環內部(從給定的示例代碼猜測) –