私は2つの配列を持っています:
_String[] a1 = {"a", "b", "c"};
String[] a2 = {"c", "b", "a"};
_
両方に同じ要素(および同じ長さ)が含まれているかどうかを確認する必要があります順序に関係なく要素。
Arrays.equals(a1, a2)
を試しましたが、要素の順序を考慮します。 _org.Apache.commons.lang.ArrayUtils
_はこのことを提供しません。
私は独自のメソッドを作成して同じことを達成できることを知っています(同じ長さをチェックし、両方の配列をソートしてからArrays.equals(a1, a2)
を使用します)同じことをする方法。
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
私はそれがあなたのために働くと思う、最初の配列を並べ替える
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);
それらを比較する前にリストをセットに変換します:
_new HashSet( Arrays.asList( a1 )).equals( new HashSet( Arrays.asList( a2 ) ));
_
または、Arrays.sort()
を使用して配列を並べ替えることができますが、配列内の要素の順序に依存するコードが破損する可能性があります。
使用する Java.util.Set
メソッドequals
。同じサイズの2つのセットを比較し、指定されたセットのすべてのメンバーが他のセットに含まれます。