我定义为采用整数键和arraylist值的Hashmap会覆盖所有以前键的值。
final HashMap<Integer,ArrayList> hashMap=new HashMap<>();
public void showComplaints(DataSnapshot dataSnapshot) {
ArrayList<String> array2 = new ArrayList<>();
ArrayList<String> array1 = new ArrayList<>();
String num;
Log.d("showComplaints", "entered");
Integer i=1;
array1.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
array1.add("Complaint ".toUpperCase() +i);
array2.clear();
for(DataSnapshot innerDS: ds.getChildren()){
String complaintStuff=innerDS.getValue().toString();
num=innerDS.getKey().toString();
array2.add(num+" - "+complaintStuff);
}
hashMap.put(i,array2);
array1.add("\n");
i++;
}
我使用日志检查是否正确输入了array2中的值,它们是。但是所有键的所有值最终都是相同的,即放置的数组的最后一次迭代的值。这有什么问题?
答案 0 :(得分:1)
您已使用此hashMap.put(i,array2);
向Map
添加键值对。
这样做的目的是在执行该语句时存储对array2
List
的引用而不是列表的状态。
要解决这个问题,您必须在每次迭代时创建一个新列表。
因此,而不是array2.clear();
使用array2 = new ArrayList<>()
。