使用HashMap时碰到的串值问题
来源:互联网 发布:网站建设软件 免费 编辑:程序博客网 时间:2024/05/19 20:21
转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/51649404
相关文章:
- 《Java集合类之Map》
- 《 Java集合类之List性能比较》
1、背景
碰到一个场景是利用List存储HashMap对象,然后分别更新每个对象的指定Key对应的value。利用到了两组List,都存有内容相仿的HashMap对象。
2、说明
创建了2个List,分别往其中添加对象。做了100次循环,循环处理条件是i大于10,其中一个list里面的一个对象值加1,正常情况应该是一个最终的值为11,一个为89.
public class Test01 { public static void main(String[] args){ List<HashMap<String,Object>> list_pass = new ArrayList<HashMap<String,Object>>(); List<HashMap<String,Object>> list_reject = new ArrayList<HashMap<String,Object>>(); for(int i=0;i<9;i++){ HashMap<String,Object> map = new HashMap<String,Object>(); map.put("choice_id", 1); map.put("score_id", 1); map.put("score_name", "测试"); map.put("number", 0); list_pass.add(map); list_reject.add(map); } System.out.println("list_pass:"+list_pass.size()+",list_reject:"+list_reject.size()); for(int j=0;j<100;j++){ if(j > 10){ for(int k=0;k<list_reject.size();k++){ HashMap<String,Object> map_reject = list_reject.get(k); int map_score_id = Integer.parseInt(String.valueOf(map_reject.get("score_id"))); if(map_score_id == 1){ int map_count_pass = Integer.parseInt(String.valueOf(map_reject.get("number"))); map_count_pass = map_count_pass + 1; map_reject.put("number", map_count_pass); System.out.println("map_reject:"+map_count_pass); break; } } }else{ for(int k=0;k<list_pass.size();k++){ HashMap<String,Object> map_pass = list_pass.get(k); int map_score_id = Integer.parseInt(String.valueOf(map_pass.get("score_id"))); if(map_score_id == 1){ int map_count_pass = Integer.parseInt(String.valueOf(map_pass.get("number"))); map_count_pass = map_count_pass + 1; map_pass.put("number", map_count_pass); System.out.println("map_pass:"+map_count_pass); break; } } } } System.out.println("list_pass:"+list_pass.toString()+",list_reject:"+list_reject.toString()); }}
看看运行结果:
list_pass:[{score_name=测试, score_id=1, number=100, choice_id=1}],list_reject:[{score_name=测试, score_id=1, number=100, choice_id=1}]
结果与想的不一致,肯定是处理环节出问题了,细看,问题应该就出在初始化List问题上,下面为初始化代码,HashMap只new了一次,同时被两个地方引用,因此出现了串值。
for(int i=0;i<9;i++){ HashMap<String,Object> map = new HashMap<String,Object>(); map.put("choice_id", 1); map.put("score_id", 1); map.put("score_name", "测试"); map.put("number", 0); list_pass.add(map); list_reject.add(map); }
试试用两个HashMap对象。
运行结果正确:
list_pass:[{score_name=测试, score_id=1, number=11, choice_id=1}],list_reject:[{score_name=测试, score_id=1, number=89, choice_id=1},]
3、小结
在往不同对象中封装HashMap时,一定要考虑是否会发生串值影响,可以通过重新new HashMap对象来消除该影响。
0 0
- 使用HashMap时碰到的串值问题
- Quarz使用时碰到的一个问题
- 使用javac编译时碰到的问题
- 使用 rosmsg时碰到的一个问题
- 使用libtool碰到的问题
- IAR使用碰到的问题
- 使用pyquery碰到的问题
- bootstrap使用碰到的问题
- 使用npm碰到的问题
- Fresco的使用碰到问题
- smb 使用时碰到问题
- 问题:SVN使用碰到的问题
- Tomcat 5.5.17使用时碰到的问题
- oracle9i中使用MERGE语法时碰到的问题
- 使用javascript打印页面时碰到的问题
- 关于使用repl 替换时碰到的问题
- 关于使用repl 替换时碰到的问题
- 近期使用McAfee8.8时碰到的一些问题
- I 帧,B帧,P帧,IDR帧的区别
- 相机模型(Camera Model)
- imx6交叉编译器arm-none-linux-gnueabi-gcc的安装
- 目标跟踪方法--CamShift 算法
- 简述C++虚函数作用及底层实现原理
- 使用HashMap时碰到的串值问题
- P V操作
- 淘宝
- 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
- 129. Sum Root to Leaf Numbers
- 梳理Tree遍历-四种基本方法+JPA注解解决
- 使用PlayCanvas制作一个简单的小游戏(二)
- 论文笔记《Rich Feature Hierarchies for accurate object detection and semantic segmentation》
- 3.乐学成语----------显示主界面