【问题标题】:iteration of Java Map - Error in showing the array elementsJava Map的迭代-显示数组元素时出错
【发布时间】:2019-04-22 15:06:24
【问题描述】:

我有一个哈希图,它的值是一个数组。当我运行下面的代码时, 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");
    }
}  

你能帮忙吗?

【问题讨论】:

  • 它显示了什么?你能详细说明你的期望和实际得到的吗?
  • 为什么是嵌套循环?

标签: java hashmap iterator


【解决方案1】:

问题是你在重用数组,所以你覆盖了之前设置的值。

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

在循环内声明double[] tempAr

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2022-11-22
    • 2013-05-05
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多