java map与list 之间的问题

publicstaticvoidmain(String[]args){Listlist=newArrayList();Mapmap=newHashMap();for(in... public static void main (String[] args){
List list = new ArrayList();
Map map = new HashMap();
for(int i = 0 ; i < 4 ; i++){
map.put("aa", i);
list.add(i,map);
}
for(int j = 0 ; j < list.size(); j++){
System.out.println(list.get(j));
}
}
请大虾讲解一下map.put以及list.add的原理
上例中 我最终想要的结果其实是0,1,2,3;
虽然将Map map = new HashMap();置于循环内就能解决这问题,但还是想了解一下原因
展开
 我来答
dianlujichu1
推荐于2016-08-19 · 超过14用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:41.4万
展开全部

map的存放是无序的,它存放的是键值对,也就是一个键对应一个值,如果该键已经存在(“aa”)那么后来的值会替换掉当前的键所指向的值。这些可以去看下map的API。你当前只生成了一个对象,一个引用也就是map。所以值总是被后来所取代的。而list是有序的,可以想象成一个数组,它允许重复值得出现,也就是说list.add(1),list.add(1)在这个list中是存在两个值的。

 

当你将new Map置于循环之内时,你生成了4个map对象,每个map对象都有自己的 "aa"键,并且这些map存放到list中,这样你可以得到你想要的结果

x369201170
2013-06-27 · TA获得超过426个赞
知道小有建树答主
回答量:570
采纳率:0%
帮助的人:365万
展开全部
map是无序的.map是基于key|value的形式.取值或存值需要一个key与之对应.而list是有序的list.add是根据集合顺序依次添加.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友afe836d
2013-06-27 · TA获得超过635个赞
知道小有建树答主
回答量:367
采纳率:50%
帮助的人:304万
展开全部
for(int i = 0 ; i < 4 ; i++){
map.put("aa", i);
list.add(i,map);
}
你把Map放到循环外面,它的作用域比较大,在for循环里map.put("aa", i);因为key都一样,所以每次put都把值给覆盖掉了。你的list里每次add的map是同一个map,也就是指向的同一个内存地址,所以最终输出的结果应该都是3,3,3,3。
你在循环内new HashMap(),每次循环都是一个新的对象,put的时候都是当new出来的对象的put,list add的时候添加的也是这个new出来的对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zakaz168
2013-06-27 · TA获得超过345个赞
知道小有建树答主
回答量:272
采纳率:0%
帮助的人:228万
展开全部
楼主,根据你上面的代码map是没办法拿到0,1,2,3的,因为Map是无序、不容许重复的。
当i=1时map中key=“aa”的value=1
....
当i=3是,map中key=“aa”的value=3
相当于把key=“aa”的value给覆盖掉了
Arraylist是用数组机制实现的序列,有序且可以重复,可以null。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式