处理LinkedHashMap。如何更新特定键的数组

问题描述 投票:0回答:1

我对 linkedHashMap 有疑问。 我建立了一个集合如下:

int v[]={0,0,0,0,0};
collection.put("A",v);
collection.put("B",v);
collection.put("C",v);
collection.put("D",v);

我有两个参数的代理:p1 是(“A”,“B”,“C”,“D”)之间的值,p2 是(0 和 4)之间的整数值。对于进入流 I 的每个代理想要将集合更新为 P2 指示的索引位置处的键 P1。 我为此编写的代码如下:

collection.get(agent.P1)[agent.P2]++;

错误如下:增量位于正确的位置,但对于所有键。 获得的输出如附图所示

anylogic
1个回答
0
投票

好吧,想一想:你改变了

v
。但是
v
出现在你所有收藏的值中,它是相同的
v
。 (谷歌“Java 通过引用传递与值传递”)。因此,如果您在一个地方更改
v
,所有其他“查看”
v
的地方也会发现它已更改。

要“拆分它们”,您需要以不同的方式实例化集合,以便每个值都是其自己的 int 数组:

collection.put("A",new int[]{0,0,0,0});
collection.put("B",new int[]{0,0,0,0});
collection.put("C",new int[]{0,0,0,0});
collection.put("D",new int[]{0,0,0,0});
© www.soinside.com 2019 - 2024. All rights reserved.