2012-04-15 87 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