web-dev-qa-db-ja.com

配列は順序を無視して等しい

可能な重複:
Java:配列の等価性をチェックします(順序は関係ありません)

私は2つの配列を持っています:

_String[] a1 = {"a", "b", "c"};
String[] a2 = {"c", "b", "a"};
_

両方に同じ要素(および同じ長さ)が含まれているかどうかを確認する必要があります順序に関係なく要素。

Arrays.equals(a1, a2)を試しましたが、要素の順序を考慮します。 _org.Apache.commons.lang.ArrayUtils_はこのことを提供しません。

私は独自のメソッドを作成して同じことを達成できることを知っています(同じ長さをチェックし、両方の配列をソートしてからArrays.equals(a1, a2)を使用します)同じことをする方法。

26
Anil Bharadia

Collectionから継承したものにこれらの配列がある場合、Collectionインターフェイスからcollection.containsAll( otherCollection )を使用できます。ただし、2つの長さを比較して、1つのセットが他のセットのスーパーセットではないことを確認する必要もあります。

(Aardvarkkとpiegamesに感謝します。)

http://docs.Oracle.com/javase/6/docs/api/Java/util/Collection.html#containsAll(Java.util.Collection)

注:これはある程度まで機能します。これは、存在する要素の少なくとも1つをチェックするために定義されています。つまり、1つのコレクションに3つのa値があり、もう1つのコレクションに7つのa値がある場合、notを呼び出すと必ず等しくない値になります。

例:

[a, b, c] == [c, a, b]             // Works -- Mixed order
[a, b, c, d, d] == [a, b, d, c, d] // Works -- Mixed order with repeats
[a, b, c, d, d] == [a, b, b, c, d] // FAILS -- Different repeats
[a, b, c, d, d] != [a, b, c, d]    // Works -- Length differs with repeats
[a, b, c, d] != [a, b, c]          // Works -- Length differs
[a, b, d] != [a, b, c]             // Works -- Disjoint sets
24
BlackVegetable

私はそれがあなたのために働くと思う、最初の配列を並べ替える

Arrays.sort(Object[]);

その後、あなたはと比較することができます

Arrays.equals(Object[],Object[]);

完全なコードは次のとおりです。

String[] a1 = {"a", "b", "c"};
String[] a2 = {"c", "b", "a"};
Arrays.sort(a2);

boolean result= Arrays.equals(a1, a2);
22
satvinder singh

それらを比較する前にリストをセットに変換します:

_new HashSet( Arrays.asList( a1 )).equals( new HashSet( Arrays.asList( a2 ) ));
_

または、Arrays.sort()を使用して配列を並べ替えることができますが、配列内の要素の順序に依存するコードが破損する可能性があります。

8
Aaron Digulla

使用する Java.util.Setメソッドequals。同じサイズの2つのセットを比較し、指定されたセットのすべてのメンバーが他のセットに含まれます。

1
Roman C