我有一个哈希图,其值是一个数组。当我运行以下代码时,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");
}
}
能请你帮忙吗?
答案 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);
}
}