如何将地图对象添加到java中的非静态列表对象

发布于 2024-12-06 12:09:39 字数 173 浏览 1 评论 0原文

我对这段代码有问题,当我将地图对象添加到列表中时,所有先前添加的对象都将被更改。如何将地图声明为非静态?

for(Statment){
   map.put(Key,value),                 
 }            
 result.add(map);

I have problem with this code,when I add map object to list,all previous added object will be changed.how can I declare map as non static?

for(Statment){
   map.put(Key,value),                 
 }            
 result.add(map);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

二智少女 2024-12-13 12:09:39

当您向容器添加某些内容时,您正在添加引用(而不是它引用的对象的副本)如果您想添加副本(这样,如果您可以更改原始内容,并且添加到列表中的副本不会更改) )你必须明确地复制它。

例如

Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
for(int i=0;i<10;i++)
   map.put(i, i);
list.add(new LinkedHashMap<Integer, Integer>(map)); // add a copy.
// you can change map without the list changing as well.

When you add something to a container, you are adding the reference (not a copy of the object it references) If you want to add a copy (so that if you can change the original, and the copy added to the list does not change) you have to explicitly copy it.

e.g.

Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
for(int i=0;i<10;i++)
   map.put(i, i);
list.add(new LinkedHashMap<Integer, Integer>(map)); // add a copy.
// you can change map without the list changing as well.
月下凄凉 2024-12-13 12:09:39

试试这个。

for (condition) {
   if (!map.containskey(key)) {
       map.put(key,value);
   }                 
}            
result.add(map);

Try this.

for (condition) {
   if (!map.containskey(key)) {
       map.put(key,value);
   }                 
}            
result.add(map);
深府石板幽径 2024-12-13 12:09:39

您必须在 for 之外声明每个对象,否则您只会添加一个引用,并且任何修改都会修改所有引用。

You have to declare each object outside the for otherwise you are adding just one reference, and any modification modifies all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文