Groovy 和java的 两层以上的Map在Copy(putAll())的过程中只Copy一层,而里面的一层还是引用的状态,也就是说,两张Map的第一层是正常COPY的,并同时对里面的Map进行了同样的引用,因此,在外面的两个Map中的任意一个内Map进行修改的时候,其实外面的Map都已经被改掉了。
解决办法就是,在做Map的COPY的时候,对被COPY的Map做最深度的遍历,逐层COPY,这样COPY之后的两个Map就是两个独立的Map。
本文探讨了Groovy和Java中两层以上Map使用putAll()方法进行拷贝时仅复制第一层的问题,并提供了解决方案:通过深度遍历实现完全独立的Map拷贝。
Groovy 和java的 两层以上的Map在Copy(putAll())的过程中只Copy一层,而里面的一层还是引用的状态,也就是说,两张Map的第一层是正常COPY的,并同时对里面的Map进行了同样的引用,因此,在外面的两个Map中的任意一个内Map进行修改的时候,其实外面的Map都已经被改掉了。
解决办法就是,在做Map的COPY的时候,对被COPY的Map做最深度的遍历,逐层COPY,这样COPY之后的两个Map就是两个独立的Map。

被折叠的 条评论
为什么被折叠?