即使对于不同的密钥,也会覆盖hashmap

时间:2018-01-27 14:43:18

标签: java android hashmap

我定义为采用整数键和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中的值,它们是。但是所有键的所有值最终都是相同的,即放置的数组的最后一次迭代的值。这有什么问题?

1 个答案:

答案 0 :(得分:1)

您已使用此hashMap.put(i,array2);Map添加键值对。 这样做的目的是在执行该语句时存储对array2 List的引用而不是列表的状态。

要解决这个问题,您必须在每次迭代时创建一个新列表。 因此,而不是array2.clear();使用array2 = new ArrayList<>()