第一步:将value[x,y,z]添加到List roles中,然后将key和roles(value)放入KV(HashMap)中。
|
|___>>>>{a=[x, y, z]}
第2步:将值[x,z]添加到角色列表中,它成功添加到列表中,但在将其添加到角色中时,它将值[x,y,z]更改为第1步中的值[x,z]。
|
|_____>>>>{a=[x, z], b=[x, z]}
必须是:{a=[x,y,z],B=[x,z]}
第3步:将值[x,y,z]添加到角色列表中,它成功添加到列表中,但在将其添加到角色中时,它在第2步中将值[x,z]更改为值[x,y,z],并在执行第2步期间将在第1步中更改的值更改为值[x,y,z]。
|
|______>>>>{a=[x, y, z], b=[x, y, z], c=[x, y, z]}
必须是:{a=[x,y,z],B=[x,z],c=[x,y,z]}
请帮助我这个代码,为什么它的改变值,我以前添加到Map.
第一个
实际输出:
Array Key : [a, b, c, d]
Array Value : x
Array Value : y
Array Value : z
Key and Value :{a=[x, y, z]}
Array Value : x
Array Value : z
Key and Value :{a=[x, z], b=[x, z]}
Array Value : x
Array Value :y
Array Value : z
Key and Value :{a=[x, y, z], b=[x, y, z], c=[x, y, z]}
Array Value : y
Array Value : z
Key and Value :{a=[x, y, z], b=[x, y, z], c=[y , z], d=[x, y, z]}
预期输出:
Array Key : [a, b, c, d]
Array Value : x
Array Value : y
Array Value : z
Key and Value :{a=[x, y, z]}
Array Value : x
Array Value : z
Key and Value :{a=x, y, z], b=[x, z]}
Array Value : x
Array Value :y
Array Value : z
Key and Value :{a=[x, y, z], b=[x, z], c=[x, y, z]}
Array Value : y
Array Value : z
Key and Value :{a=[x, y, z], b=[x, z], c=[y , z], d=[x, z]}
1条答案
按热度按时间fjaof16o1#
您将列表
roles
与Map
中的每个Key关联起来(因为您使用了对同一个对象的引用,并且在列表上调用clean()
只会删除它的所有内容,而不会像您所期望的那样分配一个新列表)。您需要在每个迭代步骤中示例化一个new列表,以便每个Key都Map到它自己的
List
,而该List
不与其他Key共享。***旁注:**请熟悉并尽量遵守Java language naming conventions *。