Arrays.equals(a1, a2)
のように動作するメソッドを探していますが、要素の順序は無視しています。私はそれをGoogleコレクション(Iterables.elementsEqual()
のようなものですが、それは順序付けを考慮しています)とJUnit(assertEquals()
で明らかにequals()
を呼び出すだけ)で見つけることができませんでした。コレクションは、コレクションの実装に依存し、それは私が望んでいるものではありません)そのようなメソッドがIterable
sを取ることが最善ですが、単にCollection
sを受け取ることでも問題ありません。もちろん、メソッドはコレクション内の重複要素を考慮に入れます(したがって、containsAll()
をテストすることはできません)。
私はそのようなことを実装する方法を尋ねているのではなく、標準のコレクションライブラリのいずれかにそれがあるかどうか疑問に思っていたことに注意してください。
Apache commons-collectionsには CollectionUtils#isEqualCollection があります:
指定されたコレクションに、まったく同じ要素がまったく同じカーディナリティで含まれている場合にtrueを返します。
つまり、aまたはbの各要素について、aのeのカーディナリティーがbのeのカーディナリティーと等しい場合。
これはまさにあなたが望んでいることだと思います。
これは3つのメソッド呼び出しと使用法です GoogleコレクションGuava ですが、おそらく次のように簡単です。
HashMultiset.create(c1).equals(HashMultiset.create(c2));
一時的なMultiset
sの作成は無駄に見えるかもしれませんが、コレクションを効率的に比較するには、何らかの方法でそれらにインデックスを付ける必要があります。
順序を無視したい場合は、セットが等しいかどうかをテストしますか?
new HashSet(c1).equals(new HashSet(c2))