2012-04-15 43 views
0

我正在寫一個代碼來顯示時間與大小。 我正在使用散列表製作條目。問題是,它正確地進行了計算,但最終當我嘗試打印出散列表時,它不會顯示7分鐘內的所有結果。相反,它會顯示last進入7個times.I已經嘗試了很多弄清楚這個問題,但couldn't.Plzz幫我出HashMap打印只是最後一項

這裏是我的代碼

public class Analysis 
{ 
    public static class KeepTime 
    { 
     String time; 
     long TotalSize; 
    } 

    Main f1 = new Main(); 
    public static int j = 0; 
    public static int check = 0; 
    public HashMap<String, KeepTime> hMap_time = new HashMap<String, KeepTime>(); 
    public KeepTime TimerInstance = new KeepTime(); 

    void TimeBasedReporting() 
    { 
     String skey; 
     String key; 
     int k; 
     int y; 

     for (k = 1; k <= f1.Flows().size(); k++) 
     { 
      check = 0; 
      j = 0; 

      skey = Integer.toString(k); 

      if (hMap_time.isEmpty()) 
      { 
       //some code 
       key = Integer.toString(hMap_time.size() + 1); 
       hMap_time.put(key, TimerInstance); 
       j = 1; 
      } 
      else if (check == 0 && j == 0) 
      { 
       for (y = 1; y <= hMap_time.size(); y++) 
       { 
        //some code 
        } 
       } 
      } 

      if (check == 0 && j == 0) 
      { 
       // some code 
       key = Integer.toString(hMap_time.size() + 1); 
       hMap_time.put(key, TimerInstance); 
      } 
      else 
      {} 


     } 



    } 
} 

以下爲輸出

  03:08:39,AM 424 
      03:08:39,AM 424 
      03:08:39,AM 424 
      03:08:39,AM 424 
      03:08:39,AM 424 
      03:08:39,AM 424 
      03:08:39,AM 424 
      03:08:39,AM 424 
      03:08:39,AM 424 
      03:08:39,AM 424 
+1

乍看之下,你似乎在濫用「地圖」。它看起來像你真的想使用'List'。 – Bombe 2012-04-15 12:16:59

+0

可能'hMap_time.size()'1 – 2012-04-15 12:18:11

回答

2

您正在創建單實例KeepTime,並將對該對象的引用用作各種鍵/值對中的值。

如果您希望它們是獨立的,您應該在每次添加新條目時創建一個新的實例。 (是的,我同意你的評論,你幾乎可以肯定不需要這裏想要一個地圖 - 但是如果你多次添加同一個參考列表,你也會遇到同樣的問題。)

+0

非常感謝...工作 – Xara 2012-04-15 12:30:36

0

的迭代通過地圖條目的方式是遍歷其map.keySet()map.entrySet()。使用其中之一。

1

問題在於,您正在使用一個TimerInstance並將其放置在地圖中,以便將每個鍵放置在地圖上

您將同一個對象與所有鍵相關聯,因此您當然會在地圖中存儲相同的值。

嘗試:

KeepTime timer = new KeepTime(); 

在的頂部的循環,並用timer替換所有TimerInstance秒。

當您每次將其存儲在地圖中時重新分配原始TimerInstance的所有成員時,您可以做到這一點而不用擔心改變邏輯。另外,如果您希望條目按升序排列,則HashMap將根據密鑰的哈希碼(在此情況下爲String)排序,因此會給出錯誤的順序。如果您需要正確的排序,請使用TreeMap - 默認字符串比較會按字母順序排列,或者您可以指定自己的自定義Comparator以提供您所需的排序。

+0

非常感謝...工作 – Xara 2012-04-15 12:33:16

+0

哦謝謝關於treemap的信息,因爲我必須做排序以及... – Xara 2012-04-15 12:51:38