Вопрос начального: у меня есть hashmap, который хранит массив целых чисел в качестве значений. Ключ для каждого значения - это объект, который состоит из двух целых чисел (координат).Java Hashmap получает значение из ключа объекта
Мой вопрос: как я могу получить значение из хэш-карты, основанной на двух координатах внутри моего объекта (мой «ключ»)?
Мои Coords Класс (с небольшой помощью 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));
Я надеюсь, что вы можете мне помочь. заранее спасибо!
Вы отправили ответ в вопрос: 'int [] theValues = map.get (новые Coords (12,13));' как это работает. – jlordo
Почему вы думаете, что ваш прием не будет работать? – Ayman
Вы правильно переопределили метод 'equals' в вашем классе' Coords', поэтому ваш вызов 'map.get' должен работать так, как вы хотите, чтобы он отвечал –