多值哈希表(ArrayList存值)问题:新项目经理对应列表未重置
哈希表存储ArrayList引用的问题解析与修复
核心疑问解答
是的,哈希表(multiValueMap)中存储的确实是ArrayList的引用,这就是你遇到两个问题的根源:
- 清空ArrayList后哈希表中的值也被清空:因为哈希表里的“值”和你操作的ArrayList是同一个对象,只是用引用指向它,修改原对象会直接影响哈希表里的内容。
- 无法按项目经理分组:你当前每次调用函数都新建一个ArrayList,然后直接覆盖掉该项目经理之前的条目,而不是往已有列表追加内容。
代码问题分析
你当前的代码逻辑错误在于:每次处理项目经理时,都新建一个alMissingValues,然后直接put进哈希表——这会把该项目经理之前对应的列表完全替换掉,而不是累积条目。
修正后的代码
function addMissingValues(strProjMgr, strDOORSName, missingValues){ var docID = delta.getID(); var strDOORSNameBoilerP= "<br /><b>Document ID</b> " + docID + ", </b><br /><i><b>DOORS Module</b> " + strDOORSName + "</i><br />"; var strHeaderText = strDOORSNameBoilerP + missingValues+ "<br /><br />"; // 先检查哈希表中是否已有该项目经理对应的ArrayList var alMissingValues = multiValueMap.get(strProjMgr); // 如果没有,才新建ArrayList并放入哈希表 if (!alMissingValues) { alMissingValues = new java.util.ArrayList(); multiValueMap.put(strProjMgr, alMissingValues); } // 往专属列表中添加当前条目 alMissingValues.add(strHeaderText); }
修正逻辑说明
- 复用已有列表:先通过
get方法获取该项目经理对应的列表,只有当列表不存在时才新建,避免覆盖已有数据。 - 隔离引用:每个项目经理对应独立的ArrayList,不会出现多个条目共享同一个对象引用的情况,自然也不会出现清空一个列表影响所有哈希表条目的问题。
内容的提问来源于stack exchange,提问作者JenPann
相关产品推荐
相关产品推荐

