我正在编写一个显示时间与大小的代码。 我正在使用hashmap进行输入。问题是它正确地进行了计算,但最后当我尝试打印出hashmap时,它没有显示7分钟的所有结果。相反它显示最后一个条目的结果7次。我已经尝试了很多来解决问题,但无法解决问题.Plzz帮助我
这是我的代码
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
答案 0 :(得分:2)
您正在创建KeepTime
的单个实例,并使用对该对象的引用作为各种键/值对中的值。
如果您希望它们独立,则每次添加新条目时都应创建 new 实例。 (是的,我同意你几乎肯定不想要一张地图的评论 - 但如果你多次向列表添加相同的引用,你也会遇到同样的问题。 )
答案 1 :(得分:1)
问题是您使用的是TimerInstance
并将其放在地图中的每个键
您将同一个对象与所有键相关联,因此当然您将在地图中存储相同的值。
尝试:
KeepTime timer = new KeepTime();
位于for循环的顶部,并将所有TimerInstance
替换为timer
。
您可以执行此操作,而无需在每次将其存储在地图中时重新分配原始TimerInstance
的所有成员时更改逻辑。
此外,如果您希望条目按升序排列,则HashMap会根据键的哈希码(在本例中为String
)为您提供错误的顺序。如果您需要正确的排序,请使用TreeMap - 默认字符串比较按字母顺序排序,或者您可以指定自己的自定义Comparator
以提供所需的排序。
答案 2 :(得分:0)
迭代地图条目的方法是迭代其map.keySet()
或map.entrySet()
。使用其中之一。