java Map和List的问题

sammysammy 2017-09-06 09:15:16
package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestListSize {
public static void main(String[] args) {
List list = new ArrayList<>();

Map<String,Object> map = new HashMap<String,Object>();

for (int i = 0; i < 10; i++) {
map.put("test", i);
System.out.println("map: "+map);
list.add(map);
System.out.println("list: "+list);
}
System.out.println(list);

}
}

以上这是源代码

map: {test=0}
list: [{test=0}]
map: {test=1}
list: [{test=1}, {test=1}]
map: {test=2}
list: [{test=2}, {test=2}, {test=2}]
map: {test=3}
list: [{test=3}, {test=3}, {test=3}, {test=3}]
map: {test=4}
list: [{test=4}, {test=4}, {test=4}, {test=4}, {test=4}]
map: {test=5}
list: [{test=5}, {test=5}, {test=5}, {test=5}, {test=5}, {test=5}]
map: {test=6}
list: [{test=6}, {test=6}, {test=6}, {test=6}, {test=6}, {test=6}, {test=6}]
map: {test=7}
list: [{test=7}, {test=7}, {test=7}, {test=7}, {test=7}, {test=7}, {test=7}, {test=7}]
map: {test=8}
list: [{test=8}, {test=8}, {test=8}, {test=8}, {test=8}, {test=8}, {test=8}, {test=8}, {test=8}]
map: {test=9}
list: [{test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}]
[{test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}]

以上是控制台输出的

为什么list中已经存进去的(test=0)在后面会被改变成(test=1)???
...全文
212 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Map实例hashMap 中键和值是可以重复的,如果之前存在,新的会替换旧的,替换后任然是存在的
  • 打赏
  • 举报
回复
本来就是这样,想变就把map放循环里面吧
Ephraim 2017-09-06
  • 打赏
  • 举报
回复
你希望得到的效果正确的写法是将Map<String,Object> map = new HashMap<String,Object>();这句放到循环体里面去。否则map这个句柄始终指向一个对象,并且list中的每个成员都是指向这个对象。
「已注销」 2017-09-06
  • 打赏
  • 举报
回复
你每次放的都是map进去。。map是同一个对象。。map put的时候 键都是test,key相同,value不同的话后来的就把前面的替换掉了。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧