【发布时间】:2019-02-17 00:15:30
【问题描述】:
这个简单的方法应该是向 HashMap 添加元素。这些元素是从 txt 文件中读取的,我已经对其进行了测试,并且该区域的所有内容都运行良好。当我打印地图中的值时会出现问题。因此,我认为添加它们时可能会出现一些问题。
txt文件的内容是
SW: (scores, 90); (scores, 91); (scores, 92);
权限为“SW”,属性为“(scores, 90)... (scores, 92)”。这些是以下方法中使用的元素。
public Map<Permissions, ArrayList<Attributes>> paMap;
public void addMap(Permissions per, Attributes att) {
if(paMap.containsKey(per)) {
paMap.get(per).add(att);
}
else{
ArrayList<Attributes> attList = new ArrayList<Attributes>();
attList.add(att);
paMap.put(per, attList);
}
}
//Attributes contain variables (Scores) and values(90-93), that is just for printing
public void printMap() {
ArrayList<Attributes> list;
for(Permissions p: paMap.keySet()) {
list = paMap.get(p);
System.out.print(p.name + ": ");
for(Attributes l: list) {
System.out.print("<" + l.variable +", " + l.value + ">; ");
}
System.out.println();
}
当我打印地图时,我希望得到与 txt 文件中完全相同的内容,但我却得到了
SW:(得分,92); (得分,92); (得分,92)
即使我从 addMap 方法中删除 paMap.get(per).add(att) 行,我最终也会得到 SW: (scores, 92);
另外,我已经测试了是否正确调用了 for 循环。
因此,我对 ArrayList 上的属性如何更新以及正确的做法感到困惑。您是否发现我添加或打印值的方式有任何错误?
感谢您的帮助
【问题讨论】:
-
向我们展示您是如何读取 txt 文件并调用
addMap(...)方法的。 -
@Luis Claramunt 您能否也为
Permissions类添加您的代码?如答案中所述 - 重要的是使Permissions不可变并正确定义equals and hashCode。 -
小心使用可变对象作为映射键