2017-06-16 8 views
-1

私のJavaプログラムでは、クラスGraphPointは、唯一の変数である2つの座標mnを使用する組み合わせ構造のポイントを記述します。私はこのような点の順不同のセットを作成します:HashSetでオブジェクトを検索するには?

Set<GraphPoint> collection = new HashSet<>(); 

は、今私はcollectionが与えられた座標に点を含むかどうかを知りたいです。これをコード化する最速の方法は何でしょうか?真返す前equals方法を使用して等価性をテストしますJavaDoc for the HashSet contains() methodパー

collection.contains(new GraphPoint(m,n)) 

GraphPointクラスが正しくhashCodeequalsを実装する場合

+3

'collection.contains(new GraphPoint(m、n))'? – Ryan

+4

@Ryanクラスが 'equals()'と 'hashCode()'を実装していると仮定します。 – shmosel

答えて

2

は、その後、containsメソッドを使用します。具体的には

このセットに指定された要素が含まれている場合はtrueを返します。より正式には、このセットに(o == null?e == null:o.equals(e))などの要素eが含まれている場合にのみtrueを返します。完全を期すために

、そしてあなたのGraphPointクラスが正確にPointのような役割を果たし、次のように、あなたはhashCodeequalsを実装することができますと仮定:

@Override 
public int hashCode() { 
    int result = m; 
    result = 31 * result + n; 
    return result; 
} 

@Override 
public boolean equals(Object other){ 
    if (this == other) return true; 
    if (!(other instanceof GraphPoint)) return false; 
    final GraphPoint that = (GraphPoint) other; 
    return this.m == that.m && this.n == that.n; 
} 

推奨読書:Effective Java: Equals and HashCode

も、私の前の答えのフィードバックのための@Federico_Peralta_Schaffnerと@shmoselのおかげです。

+0

'x'と' y'か 'm'と' n'ですか? – shmosel

+0

しかし、あなたは 'hashCode()'に 'x'と' y'を持っています。 – shmosel

+0

修正済みフィードバックに感謝します。 –

関連する問題