List使用add方法添加数据时的覆盖问题
2016-04-11 23:24
597 查看
今天在写程序时遇到一个很容易犯错的问题,下面记录一下,首先看代码:
上述代码存在一个问题,当我运行的时候,classroomListItems的size是正常的,而其中的元素却全部都是最后添加进去的contentListItems,也就是说每次添加contentListItems时覆盖了前面的数据。
当然,问题的原因也很简单:
在我循环添加数据的时候,我只声明了一次contentListItems,也就是只有一个contentListItems这个List,这样我每次写入Map数据的List都是同一个List,所以当我把这个List添加进classroomListItems时,添加的本质是contentListItems的地址,所以每次都是同一个contentListItems,这样后面的数据就覆盖了前面的数据。
解决方法就是每次都生成一个List:
问题很简单,只是我自己太粗心了
<span style="font-size:12px;">private void loadData() { Map<String, Object> contentMap = null; classroomListItems.clear(); // classroomListItems = new ArrayList<List<Map<String, Object>>>(); for(String key : MainActivity.classroomMap.keySet()) { contentListItems.clear(); // contentListItems = new ArrayList< Map<String, Object> >(); for(int j = 0; j < MainActivity.classroomMap.get(key).size(); ++j) { contentMap = new HashMap<String, Object>(); contentMap.put("courseTime", MainActivity.classroomMap.get(key).get(j).getStarttime().substring(11, 16) + "-" + MainActivity.classroomMap.get(key).get(j).getEndtime().substring(11, 16)); contentMap.put("courseName", MainActivity.classroomMap.get(key).get(j).getCourse_name()); contentMap.put("classroomName", MainActivity.classroomMap.get(key).get(j).getClassroom_name()); contentListItems.add(contentMap); } classroomListItems.add(contentListItems); Log.e("contentListItems", contentListItems.get(0).get("classroomName").toString()); } for(List<Map<String, Object>> list : classroomListItems) { Log.e("classroomListItems", list.get(0).get("classroomName").toString()); } if (null == adapter) { adapter = new ClassroomAdapter(ctx, contentListItems, classroomListItems); // 创建适配器 listView.setAdapter(adapter); } else { adapter.refresh(classroomListItems); } }</span>
上述代码存在一个问题,当我运行的时候,classroomListItems的size是正常的,而其中的元素却全部都是最后添加进去的contentListItems,也就是说每次添加contentListItems时覆盖了前面的数据。
当然,问题的原因也很简单:
在我循环添加数据的时候,我只声明了一次contentListItems,也就是只有一个contentListItems这个List,这样我每次写入Map数据的List都是同一个List,所以当我把这个List添加进classroomListItems时,添加的本质是contentListItems的地址,所以每次都是同一个contentListItems,这样后面的数据就覆盖了前面的数据。
解决方法就是每次都生成一个List:
for(String key : MainActivity.classroomMap.keySet()) { contentListItems = new ArrayList< Map<String, Object> >(); contentListItems.clear(); .... }
问题很简单,只是我自己太粗心了
相关文章推荐
- POJ3469 Dual Core CPU 最小割求解最小费用划分集合
- CodeForces 589D Boulevard (一维区间判断相交 非线段交做法)
- mysql事务隔离级别REPEATABLE-READ幻读
- Xarmarin.forms for vs2015 搞了一整天没能配置成功,生成老是出错,暂决定不用建Xarmarin.forms项目
- 论信息系统项目风险管理
- CSDN-markdown编辑器使用进阶篇
- poj1661 经典dp
- setAdapter和requestAsyncTask组合使用揭秘
- 你的知识资产
- RtlInitUnicodeString使用注意事项
- wordpress----如何设置段落首行自动空两格
- 用队列模拟服务台前的排队现象问题_c/c++
- mysql二次安装&中文乱码(各种编码问题)
- Nginx服务器
- 为什么你应该(从现在开始就)写博客
- vs2012调试mysql源码
- 大型网站架构不得不考虑的10个问题
- 一个模 仿探探 相册 的控件(升级了一下)
- Statistical Analysis of Large Datasets An Exploration of R - MySQL Interface
- 宽带连接错误代码651网友推荐解决方法