Java Map的迭代-显示数组元素时出错

时间:2018-11-20 07:53:09

标签: java hashmap iterator

我有一个哈希图,其值是一个数组。当我运行以下代码时,tempAr [0]和tempAr [1]的内容正确显示。但是,迭代器无法准确显示数组的元素。非常感谢您的帮助。

 Map<String, double[]> m1 = new HashMap<String, double[]>();

 double[] tempAr = new double[2];
 String mykey;

 for (int i = 0; i < 3; i++) {
     for (int j = 0; j < 3; j++) {                         
         mykey = "Key" + i + j;
         tempAr[0] = i;
         tempAr[1] = j;

        System.out.println(" Now key is " + mykey + " and i is "
                + tempAr[0] + " j is " + tempAr[1]) ;
        mz.put(mykey, tempAr);
    }
}

Iterator<Entry<String, double[]>> it = mz.entrySet().iterator();

while (it.hasNext()) {
    Map.Entry<String, double[]> pair = (Map.Entry<String, double[]>) it.next();
    System.out.println(pair.getKey() + " = "); // + pair.getValue());
    double[] value = (double[]) pair.getValue();

    for(double str : value) {
        System.out.println(str + "\t");
    }
}  

能请你帮忙吗?

1 个答案:

答案 0 :(得分:2)

问题在于您正在重用数组,因此将覆盖先前设置的值。

将某些内容放入地图(或列表,集合,数组等)中不会复制该内容:它只是将对该内容的引用放入地图中。这样,您将在地图中的事物中看到后续的更新。

在循环内声明double[] tempAr

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    // ...
    double[] tempAr = {i, j};
    mz.put(mykey, tempAr);
  }
}