Map中使用ArrayList为Value,所有值都相同的的错误

Map中使用ArrayList为Value,所有值都相同的的错误

开门见山:问题出在址传递,而非值传递。
首先,我的需求是从一个存储Map的数组中,将编号重复的数据进行整理。
在这里插入图片描述
我要做的就是数据整理之后,43作为key,两个不同的MTRLNO拼接起来作为Value。
所以想使用list暂时存储编号,当在Map中使用新key时,清空list中原先的数据,重新存储对应key的编号,并且在遍历循环中同一key下不断的覆盖Value。来达到目的

这里上错误代码
/有问题Map中存放list
			String deptNo;
			String nextDeptNo;
			List mtrlNoList = new ArrayList();
			Map deptNoMap = new HashMap();
			//这里就是从数据库中获取到需要整理的数据
			Map<String, Object>[] lackData = msl02DAO.findLackMtrlNo();
			for(int i =0; i<lackData.length;i++){
				
				//厂名
				deptNo = (String) lackData[i].get("POSITIONNO");
				
				if(i == 0){
				//1、拿到MTRLNO
					mtrlNoList.add(lackData[i].get("MTRLNO"));
					//设置31的MTRLNO
					deptNoMap.put(deptNo, mtrlNoList);
				}
				//判断(当前位置编号)和(上一条位置编号)是否相等
				else if(deptNo.equals(lackData[i-1].get("POSITIONNO"))){
				//如果相等,那么list存储相同POSITIONNO的不同MTRLNO
					mtrlNoList.add(lackData[i].get("MTRLNO"));
					//相同key,覆盖value
					deptNoMap.put(deptNo, mtrlNoList);	
				}else{
					//对list进行清空
					mtrlNoList.clear();
					//再次进行添加
					mtrlNoList.add(lackData[i].get("MTRLNO"));
					deptNoMap.put(deptNo, mtrlNoList);	
				}	
			}
			System.out.println(deptNoMap);

第一次循环:走i == 0的代码块,数据正常
在这里插入图片描述
第二次循环,首先对ArrayList数据清空,添加进新数据(出现问题)
我们看key= 31的数据,和43的数据是完全一样的。(看编号后缀,原先为311,现在为431),如果还不够明显的话,看下一次循环。
在这里插入图片描述
我们发现:同上一次一样,所有key的Value值都是一样的。

在这里插入图片描述
这是因为,采用list作为值来存储,Map存储的是list的地址值,而不是其中的实际值。所有key的Value值都是存储的lsit的地址值,所以所有值都相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值