gpt4 book ai didi

java - 每次我使用 .put() 时,HashMap 都会被覆盖

转载 作者:行者123 更新时间:2023-11-29 06:48:09 25 4
gpt4 key购买 nike

我的申请与股票市场有关。我有一个持续更新名为 Price 的对象的提要。 Price 有一个存储安全代码 (String) 和价格 (Double) 的 HashMap。每次有新价格出现时,此对象都会更新。

该应用程序应该扫描大变动的价格。我有一个名为 Poller 的单独类,它每秒轮询一次 Price 对象并拍摄价格快照。快照是如上所述的 HashMap。然后,我想将这个价格 HashMap 与 pollNumber 一起存储在另一个 HashMap 中,稍后我可以传递 pollNumber 并获取与该 pollNumber 对应的时间的价格。

但我得到的是所有以前的价格都被覆盖并输出类似于下面的价格。

0:{MSFT=17.67,AAPL=93.85,GOOG=333.86}{0={MSFT=17.67,AAPL=93.85,GOOG=333.86}}

1:{MSFT=17.64,AAPL=93.85,GOOG=334.02}{0={MSFT=17.64, AAPL=93.85, GOOG=334.02}, 1={MSFT=17.64, AAPL=93.85, GOOG=334.02}}

2:{MSFT=17.64,AAPL=93.85,GOOG=334.08}{0={MSFT=17.64, AAPL=93.85, GOOG=334.08}, 1={MSFT=17.64, AAPL=93.85, GOOG=334.08},2={MSFT=17.64, AAPL=93.85, GOOG=334.08}}

3:{MSFT=17.65,AAPL=93.83,GOOG=334.08}{0={MSFT=17.65, AAPL=93.83, GOOG=334.08}, 1={MSFT=17.65, AAPL=93.83, GOOG=334.08}, 2={MSFT=17.65, AAPL=93.83, GOOG=334.08}, 3 ={MSFT=17.65, AAPL=93.83, GOOG=334.08}}

4:{MSFT=17.64,AAPL=93.83,GOOG=334.07}{0={MSFT=17.64, AAPL=93.83, GOOG=334.07}, 1={MSFT=17.64, AAPL=93.83, GOOG=334.07}, 2={MSFT=17.64, AAPL=93.83, GOOG=334.07}, 3 ={MSFT=17.64, AAPL=93.83, GOOG=334.07}, 4={MSFT=17.64, AAPL=93.83, GOOG=334.07}}

当我打印应该具有不同价格系列的整个 HashMap 时,您可以看到它们都是相同的。

基本上 .put() 函数会以某种方式覆盖旧条目。

如果您知道如何修复该行为,以便 HashMap(大的)每次都有一个新的价格系列条目。


public class Poller {

private final int period=1000;
private final int delay=1000;

private static int pollNumber=0;
private static HashMap<Integer,HashMap<String,Double>>
polledPrice = new HashMap<Integer, HashMap<String,Double>>();

public void pollPrice(){

Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
// System.out.println(Price.getPricesMap());
System.out.println(pollNumber+" : "+Price.getPricesMap());
polledPrice.put(pollNumber, Price.getPricesMap());
System.out.println(polledPrice);
pollNumber = pollNumber+1;

Time atime = new Time();
atime.addToTimeMap(pollNumber);

}
}, delay, period);
}
}

最佳答案

您需要获取 HashMap 的副本,否则看起来您只是在一遍又一遍地存储相同的 Map,这当然会被覆盖。使用这一行:

polledPrice.put(pollNumber, new HashMap(Price.getPricesMap()));

作为最简单的修复。

关于java - 每次我使用 .put() 时,HashMap 都会被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com