2012-03-23 6 views
0

配列のequals関数はインスタンスをチェックするだけなので、Setではうまく動作しません。 したがって、私はどのようにJavaで配列のセットを作るのだろうか?Javaで配列のセットを作る方法は?

オブジェクトに各配列を配置し、そのクラスに対してequals関数を実装する方法がありますが、パフォーマンスが低下することはありますか?

+0

、 'hashCode'も実装する必要があります。ツリーに基づいた実装を実装するには、何らかの並べ替えを実装する必要があります。 –

+0

[マップでキーを配列にする方法]と密接に関連しています(http://stackoverflow.com/questions/16839182/can-a-java-array-be-used-as-a-hashmap-key) 。 – Raedwald

答えて

-1

、あなたはそれを拡張し、equalshashCodeメソッドをオーバーライドすることができます。ここではサンプルです:

public MyArrayList extends ArrayList<MyClass> { 

    @Override 
    public boolean equals(Object o) { 
     if (o instanceof MyArrayList) { 
      //place your comparison logic here 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public int hashCode() { 
     //just a sample, you can place your own code 
     return super.hashCode(); 
    } 
} 

UPDATE:

あなたもちょうどにコードを変更し、一般的な使用のためにそれを上書きすることができます:ハッシュテーブルに基づいて設定された実装では

public MyArrayList<T> extends ArrayList<T> { 
    //overrides the methods you need 
    @Override 
    public boolean equals(Object o) { 
     if (o instanceof MyArrayList) { 
      //place your comparison logic here 
      return true; 
     } 
     return false; 
    } 
} 
2

Arrayを必要とする従来のAPIのために絶対に必要がない限り、生の配列は使用しないでください。

代わりに、タイプセーフであるArrayList<T>を使用してください。これらの問題は発生しません。

+0

+1ベストプラクティス。 –

-2

Setを拡張し、equalsメソッドをオーバーライドするクラスがそれを実行できるクラス。

1

SetをTreeSetのインスタンスにすると、すべての比較(等価)に使用されるカスタムコンパレータを指定できます。

0

あなたの配列のラッパークラスを作成し、それに応じてハッシュコードとオーバーライドをオーバーライドできます。たとえば :ArrayListのクラスがすでに配列をラップしているので

public class MyArrayContainer { 
int[] myArray = new int[100]; 
@Override 
public boolean equals(Object other) { 
    if (null!= other && other instanceof MyArrayContainer){ 
    MyArrayContainer o = (MyArrayContainer) other; 
    final int myLength = myArray.length; 
    if (o.myArray.length != myLength){ 
     return false; 
    } 
    for (int i = 0; i < myLength; i++){ 
     if (myArray[i] != o.myArray[i]){ 
       return false; 
     } 
    } 
    return true; 
    } 
    return false; 
} 

@Override 
public int hashCode() { 
    return myArray.length; 
} 
} 
関連する問題