65

私がここで見つけていない単純なワンライナーがあるかもしれませんが、これは私の質問です:

ArrayListに別のArrayListのすべてのオブジェクトが含まれているかどうかを確認するにはどうすればよいですか?私は(存在する場合)次のようなものを探しています:

//INCORRECT EXAMPLE:
if(one.contains(two))
{
    return true;
}
else
{
    return false;
}

例えば:

ArrayList one = {1, 2, 3, 4, 5}

ArrayList two = {1, 2, 3} --> True
ArrayList two = {} --> True
ArrayList two = {1, 2, 3, 4, 5} --> True
ArrayList two = {1, 5, 2} --> True
ArrayList two = {1, 7, 4} --> False
ArrayList two = {0, 1, 3} --> False
ArrayList two = {4, 5, 6} --> False
ArrayList two = {7, 8, 9} --> False
4

8 に答える 8

114

containsAllインターフェースに宣言というメソッドがありjava.util.Collectionます。あなたの設定でone.containsAll(two)は、望ましい答えが得られます。

于 2013-01-24T22:07:29.250 に答える
14

List インターフェイスごと:

myList.containsAll(...);
于 2013-01-24T22:07:31.207 に答える
11

インターフェイスcontainsAll(Collection<?> c)からメソッドを見てみましょう。List私はそれがあなたが探しているものだと思います。

于 2013-01-24T22:07:52.480 に答える
7

JUnit テストで 2 つの配列が等しいことをアサートするために使用した、containsAll() の別の使用例を次に示します。

List<String> expected = new ArrayList<String>();
expected.add("this");
expected.add("that");
expected.add("another");

List<String> actual = new ArrayListString();
actual.add("another");
actual.add("that");
actual.add("this");

Assert.assertTrue("The lists do not match!", expected.containsAll(actual));
于 2016-08-12T15:35:06.713 に答える
5

リストのメソッドを使用containsAllしてチェックを行うことができます。ただし、これは線形操作です。リストが大きい場合は、HashSet最初に変換してから実行する必要がありcontainsAllます。

HashSet tmp = new HashSet(one);
if (tmp.containsAll(two)) {
    ...
}

の長さが で、2 の長さが の場合oneNこのM解の時間計算量はO(M+N)です。「プレーン」containsAllには の複雑さがありO(M*N)、これは大幅に悪化する可能性があります。

于 2013-01-24T22:09:11.173 に答える
4

例のコードは意味がありませんが、とにかく例を示します。

ArrayList<Integer> one, two;
//initialize
boolean good = true;
for (int i = 0; i < two.size(); i ++) {
    if (!(one.contains(two.get(i))) {
        good = false;
        break;
    }
}

のすべての要素を単純にループしtwo、それらが にあるかどうかを確認しますone

次に、ブールgood値に必要な値が含まれます。

ArrayList#containsを参照してください。

編集:うわー、私は完全にcontainsAllを忘れていました。まあ、これは、本当に理解したい場合の別の方法です。

于 2013-01-24T22:07:21.640 に答える
-1

org.apache.commons.collections.CollectionUtils で宣言された isEqualCollection() メソッドは、コレクションが同じかどうかを示します。

if (CollectionUtils.isEqualCollection(collectionA,collectionB)) { do smt... }

于 2020-08-19T07:02:20.103 に答える