【发布时间】:2017-04-13 19:32:45
【问题描述】:
我想为唯一坐标存储不同的值。我使用整数数组将 HashMap 中的这些值存储到相应的坐标,但每个键都映射到最后计算的值。
代码:
import java.util.*;
import java.awt.Point;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Solution
{
@SuppressWarnings("empty-statement")
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
Integer[] ar = new Integer[3];
Map<Point, Integer[]> map = new HashMap<>();
for (int a0 = 0; a0 < m; a0++) {
Point p = new Point(in.nextInt(), in.nextInt());
int a = in.nextInt();
int b = in.nextInt();
if (map.containsKey(p)) {
if (map.get(p)[2] < (a - b)) {
ar[0] = a;
ar[1] = b;
ar[2] = a - b;
map.put(p, ar);
}
} else {
ar[0] = a;
ar[1] = b;
ar[2] = a - b;
map.put(p, ar);
}
}
Set<Entry<Point, Integer[]>> set = map.entrySet();
List<Entry<Point, Integer[]>> list = new ArrayList<>(set);
for (Map.Entry<Point, Integer[]> entry : list)
System.out.println(entry.getKey() + " ==== " + Arrays.toString(entry.getValue()));
}
}
输入:
3 3
0 1 1 1
1 2 2 4
2 0 1 2
结果:
java.awt.Point[x=0,y=1] ==== [1, 2, -1]
java.awt.Point[x=1,y=2] ==== [1, 2, -1]
java.awt.Point[x=2,y=0] ==== [1, 2, -1]
【问题讨论】:
-
每次都需要新建一个数组。
-
对,
map.put会在存在键时覆盖任何数据 -
@Lashane 虽然这不是这里的问题。它总是相同的数组实例。
-
@Marvin 啊,还有 :)
-
有没有其他方法可以做到这一点,而无需每次都创建新数组? @马文