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();置于循环内就能解决这问题,但还是想了解一下原因 展开
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();置于循环内就能解决这问题,但还是想了解一下原因 展开
4个回答
展开全部
map是无序的.map是基于key|value的形式.取值或存值需要一个key与之对应.而list是有序的list.add是根据集合顺序依次添加.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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出来的对象。
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出来的对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主,根据你上面的代码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。
当i=1时map中key=“aa”的value=1
....
当i=3是,map中key=“aa”的value=3
相当于把key=“aa”的value给覆盖掉了
Arraylist是用数组机制实现的序列,有序且可以重复,可以null。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询