キーの複数の値をデータ構造に格納しようとしているので、Guava(Googleコレクション)のMultiMapを使用しています。
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を返します。
destinations.size()
注:キー値は、何かを配置すると増加するにつれてマルチマップに格納されます。また、キーが。String
の代わりにある場合も発生しませんdouble[]
。
問題が何であるかについて何か考えはありますか?
編集:JonSkeetに感謝します。クラスを実装しました。
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を返し、2番目のものはfalseを返します。@Override
メソッドの前に置くとエラーにequals
なりますが、現在の問題は何ですか?
ありがとう :)
equals
Edit2:これに変更すると、期待どおりに動作するようになりました。
@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);
}
}
みんな、ありがとう。