初学者问题:我有一个hashmap,它存储一个整数数组作为值。每个值的关键是一个由两个整数(坐标)组成的对象。
我的问题:如何根据我对象中的两个coördinates(我的'key')从hashmap中检索一个值?
My Coords Class(在Eclipse的帮助下):
public class Coords {
int x;
int y;
public Coords(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Coords other = (Coords) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
}
构建Hashmap:
public class BuildMap {
public Coords coords;
public int[] someData = new int[4];
public Random random = new Random();
HashMap<Coords, int[]> map = new HashMap<Coords, int[]>();
public void buildHashMap() {
// coordinates from (0,0) to (31,31)
for (int i = 0; i < 32; i++) {
for (int j = 0; j < 32; j++) {
coords = new Coords(i, j);
// Every Coord gets a few random numbers
for (int k = 0; k < 4; k++) {
someData[k] = random.nextInt(8564);
}
map.put(coords, someData);
}
}
如果我想访问坐标12,13上的数组,我该如何检索它?是否需要迭代(我希望不是,我想添加100,000+坐标并快速访问)。
我希望这会在
行中有所作为int[] theValues = map.get(new Coords(12,13));
我希望你能帮助我。提前谢谢!
答案 0 :(得分:3)
问题在于如何构建Map。
您要添加与每个元素的值相同的数组。
您需要为每个元素实例化一个新数组。
for (int i = 0; i < 32; i++) {
for (int j = 0; j < 32; j++) {
coords = new Coords(i, j);
int[] someData = new int[4]; // <==== create a new array for each Map value
// Every Coord gets a few random numbers
for (int k = 0; k < 4; k++) {
someData[k] = random.nextInt(8564);
}
map.put(coords, someData);
}
答案 1 :(得分:1)
你有一个错误:你只使用一个数组,并且很多引用它。
移动此行
public int[] someData = new int[4]; // without public
此行上方或下方:
coords = new Coords(i, j);
修复它。