2013-09-24 157 views
0

我有一個HashMap,其中包含String作爲鍵,並將Object作爲值爲了對我的HashMap進行排序,我創建了一個TreeMap,迭代HashMap並將HashMap的每個條目放入一個TreeMap其中的關鍵是帶寬和值signal.Here的實例是我的代碼將HashMap轉換爲Sorted TreeMap

public void createSortedSet(HashMap<String, Signal> map, long totalSize) { 
TreeMap<Float, Signal> sortedMap = new TreeMap<Float, Signal>(); 
JOptionPane.showMessageDialog(null, map.size()); 
    try { 

    final Iterator<String> iterator = map.keySet().iterator(); 
    while (iterator.hasNext()) { 
     String messageName = iterator.next(); 
     Signal signal = map.get(messageName); 
     signal.setBandwidth((signal.getSize()/(float) totalSize) * 100); 
     sortedMap.put(signal.getBandwidth(), signal); 
    } 
    JOptionPane.showMessageDialog(null, sortedMap.size()); 

    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 

這裏的問題是地圖的大小是8318,而while循環後,當我檢查TreeMap中它給455的尺寸?這是否意味着並非所有的信號實例都存儲在TreeMap中

任何幫助?

+0

運行您的調試器以查看多個信號對象是否共享相同的大小。 – Tap

+0

你的意思是相同的帶寬? – Wearybands

+0

沒錯,但帶寬歸結爲大小,因爲'totalSize'不會改變。 – Tap

回答

0

請注意,您在TreeMap中使用的不同密鑰與HashMap中的不同。作爲Map,密鑰必須是唯一的。 put方法將用相同的鍵替換以前的任何值。很可能您對新密鑰的計算會產生重複並導致新地圖的大小比舊地圖的大小更低。

0

我希望問題是你有原始地圖的「大小」(由getSize()返回)是相同的條目。由於Map無法爲同一個鍵保存多個值,因此具有相同「大小」的原始條目將被刪除。

0

不同的信號包含等於帶寬sortedMap.put(signal.getBandwidth(), signal);