我对 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]++;
错误如下:增量位于正确的位置,但对于所有键。 获得的输出如附图所示
好吧,想一想:你改变了
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});