Я пытаюсь сохранить несколько значений для ключа в структуре данных, поэтому я использую MultiMap от Guava (Google Collection).Java MultiMap Not Recognizing Key
Multimap<double[], double[]> destinations = HashMultimap.create();
destinations = ArrayListMultimap.create();
double[] startingPoint = new double[] {1.0, 2.0};
double[] end = new double[] {3.0, 4.0};
destinations.put(startingPoint, end);
System.out.println(destinations.containsKey(startingPoint));
И он возвращает false.
Примечание: Ключевые значения хранятся в Multimap, как и destinations.size()
увеличивается, когда я ставлю что-то there.It также не происходит, когда ключи String
вместо double[]
.
Любая идея, в чем проблема?
Edit: Большое спасибо Jon тарелочкам теперь я реализовал класс:
class Point {
double lat;
double lng;
public boolean equals(Point p) {
if (lat == p.lat && lng == p.lng)
return true;
else
return false;
}
@Override
public int hashCode() {
int hash = 29;
hash = hash*41 + (int)(lat * 100000);
hash = hash*41 + (int)(lng * 100000);
return hash;
}
public Point(double newlat, double newlng) {
lat = newlat;
lng = newlng;
}
}
А теперь у меня новая проблема. Вот как я его использую:
Multimap<Point, Point> destinations = HashMultimap.create();
destinations = ArrayListMultimap.create();
Point startingPoint = new Point(1.0, 2.0);
Point end = new Point(3.0, 4.0);
destinations.put(startingPoint, end);
System.out.println(destinations.containsKey(startingPoint));
System.out.println(destinations.containsKey(new Point(1.0, 2.0)));
Первый возвращает true, второй возвращает false. Это дает мне ошибку, если я положил @Override
до метода equals
. Любая идея, в чем проблема сейчас?
Спасибо :)
edit2: Теперь ведет себя точно так, как ожидается, когда я изменил equals
к этому:
@Override
public boolean equals(Object p) {
if (this == p)
return true;
else if (!(p instanceof Point))
return false;
else {
Point that = (Point) p;
return (that.lat == lat) && (that.lng == lng);
}
}
спасибо всем.
Существует а [связаны вопрос] (http://stackoverflow.com/questions/16839182/can-a-java-array-be- used-as-a-hashmap-key) для простого Java-карты. – Raedwald