итерация Java Map - ошибка при отображении элементов массива - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть hashmap, значением которого является массив.Когда я запускаю приведенный ниже код, содержимое 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 голосов
/ 20 ноября 2018

Проблема в том, что вы повторно используете массив, поэтому вы перезаписываете ранее установленные значения.

Помещение чего-либо в карту (или список, набор, массив и т. Д.) Не копирует эту вещь: онопросто помещает ссылку на эту вещь на карту.Таким образом, вы увидите последующие обновления в объекте на карте.

Объявите double[] tempAr внутри цикла.

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    // ...
    double[] tempAr = {i, j};
    mz.put(mykey, tempAr);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...