关于javaMap的put问题
答案:6 悬赏:60 手机版
解决时间 2021-03-31 13:27
- 提问者网友:流星是天使的眼泪
- 2021-03-31 05:05
关于javaMap的put问题
最佳答案
- 五星知识达人网友:舊物识亽
- 2021-03-31 06:13
Map map = new HashMap();
for (int i = 0; i < 10; i++) {
List list = new ArrayList();
for (int j = 0; j < 20; j++) {
list.add(j);
}
map.put(i, list);
}
System.out.println(map);
这样就可以了。
List list = new ArrayList();这句你放在发最外面,这是一个对象,你在循环里面做什么操作,都是操作的这个对象,所以,虽然你用了map.put把list给put进去了,可是,list还保留着对这个对象的引用,当你用list.clear()的时候,就已经通过list把list所引用对象里面的内容给清了。map.put,里面保留了的对象,也只不过是一个对象的引用而已。在你的代码中,list所new的对象的引用,是不止一处的,map中所保存的所有的对象,还有外面的list,都是引用得同一个对象。在你的代码的循环完成后,加一句:list.add(0),你会发现,map里面所有的元素,都已经多加了一个0了。
JAVA中,如果生成了一个对象,不管你把对象放哪里,都只是对这个对象的一个引用,每放一个地方,就会多一个引用,如此而已。如果想要放弃对生成的对象的引用,要用list=null这种方式,而不是clear,clear方法是引用到对象以后,调用对象的clear方法,所以,不要误解了。
慢慢来,这些错误难免会犯,等对JAVA熟练了,细心一点就可以很轻松发现这问题了,一起加油。
说得有点乱哈,但愿还能看嘀懂,嘻嘻
天天开心呀。。。
:)
for (int i = 0; i < 10; i++) {
List list = new ArrayList();
for (int j = 0; j < 20; j++) {
list.add(j);
}
map.put(i, list);
}
System.out.println(map);
这样就可以了。
List list = new ArrayList();这句你放在发最外面,这是一个对象,你在循环里面做什么操作,都是操作的这个对象,所以,虽然你用了map.put把list给put进去了,可是,list还保留着对这个对象的引用,当你用list.clear()的时候,就已经通过list把list所引用对象里面的内容给清了。map.put,里面保留了的对象,也只不过是一个对象的引用而已。在你的代码中,list所new的对象的引用,是不止一处的,map中所保存的所有的对象,还有外面的list,都是引用得同一个对象。在你的代码的循环完成后,加一句:list.add(0),你会发现,map里面所有的元素,都已经多加了一个0了。
JAVA中,如果生成了一个对象,不管你把对象放哪里,都只是对这个对象的一个引用,每放一个地方,就会多一个引用,如此而已。如果想要放弃对生成的对象的引用,要用list=null这种方式,而不是clear,clear方法是引用到对象以后,调用对象的clear方法,所以,不要误解了。
慢慢来,这些错误难免会犯,等对JAVA熟练了,细心一点就可以很轻松发现这问题了,一起加油。
说得有点乱哈,但愿还能看嘀懂,嘻嘻
天天开心呀。。。
:)
全部回答
- 1楼网友:何以畏孤独
- 2021-03-31 10:04
map中保存的是list的引用
你用了list.clear(); 已经清除了list 中的数据
你需要每次都new一个arraylist
这个是正解
你用了list.clear(); 已经清除了list 中的数据
你需要每次都new一个arraylist
这个是正解
- 2楼网友:千杯敬自由
- 2021-03-31 09:16
map中保存的是list的引用
你用了list.clear(); 已经清除了list 中的数据
你需要每次都new一个arraylist
你用了list.clear(); 已经清除了list 中的数据
你需要每次都new一个arraylist
- 3楼网友:旧脸谱
- 2021-03-31 09:06
Map map = new HashMap();
for (int i = 0; i < 10; i++) {
List list = new ArrayList();
for (int j = 0; j < 20; j++) {
list.add(j);
}
map.put(i, list);
}
System.out.println(map);
for (int i = 0; i < 10; i++) {
List list = new ArrayList();
for (int j = 0; j < 20; j++) {
list.add(j);
}
map.put(i, list);
}
System.out.println(map);
- 4楼网友:鸽屿
- 2021-03-31 07:56
所有map里放的都是用一个List的引用 你最后调用了list.clear() 把list里的东西都清空了
只要把最好的
list.clear();
这句删掉就行了.
只要把最好的
list.clear();
这句删掉就行了.
- 5楼网友:酒安江南
- 2021-03-31 06:48
Set set = new HashSet();
Map map = new HashMap();
for (int i = 0; i < 10; i++) {
for (int j = 0; j <=20; j++) {
set.add(j);
}
map.put(i, set);
}
System.out.println(map);
用 Set吧
Map map = new HashMap();
for (int i = 0; i < 10; i++) {
for (int j = 0; j <=20; j++) {
set.add(j);
}
map.put(i, set);
}
System.out.println(map);
用 Set吧
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯