1

私は2つの配列リストを持っています

ArrayList<String> a1
ArrayList<String> a2

a1 のすべての要素が a2 に存在するかどうかを確認したい。これは、SOに関する質問から得た、私が試していたものです

if (Arrays.asList(a2).containsAll(Arrays.asList(a1)))
{a2ContainsA1=true;}

一貫した結果が得られない...これを行う他の方法はありますか?

4

8 に答える 8

7

あなたの質問を正しく理解しているかどうかわかりませんが、なぜ使用しているのArrays.asList()ですか?

これを試しました:

    ArrayList<String> a1 = new ArrayList<String>();
    ArrayList<String> a2 = new ArrayList<String>();

    a1.add("a");
    a1.add("b");
    a2.add("b");
    a2.add("a");

    System.out.println(a2.containsAll(a1));

そしてtrue 、追加の要素を追加すると出力a1されます(予想どおり):

     ArrayList<String> a1 = new ArrayList<String>();
    ArrayList<String> a2 = new ArrayList<String>();

    a1.add("a");
    a1.add("b");
    a1.add("c");
    a2.add("b");
    a2.add("a");

    System.out.println(a2.containsAll(a1));

そして、それは出力しますfalse

于 2013-01-07T19:24:02.173 に答える
2

すでにリストa1とここがあります。必要なのは、のすべての一意の要素がa2にあるかどうかを確認することです。したがって、次のことをテストする必要があります。a1a2

a1.containsAll(a2)

Arrays.asList()引数として指定したすべての要素からリストを作成します(「すべての要素」が1つの要素のみである場合でも)。実際、現在のコードは、リストオブジェクトを含む単一要素リストに、リストオブジェクトを含む別の単一要素リストのすべての要素が含まれているかどうかを確認しようとし a1ます。そして、これは、リストとが等しい場合、つまり、契約に従って、これらのリストの両方が同じインデックスに同じ要素を含む場合にのみ当てはまります。 a2a1a2List

これは確かにあなたが探していたものではありません!

于 2013-01-07T19:48:33.263 に答える
2

2 つの ArrayLists を Set オブジェクトに変換し、set 操作を使用して一方が他方のサブセットであるかどうかを判断する方が簡単だと思います。これは、重複に関する@fgeのコメントも満たします。

ArrayList<String> a1 = ...;
ArrayList<String> a2 = ...;

public boolean isSubset(ArrayList<String> a1, ArrayList<String> a2) {
   Set<String> s1 = new HashSet(a1);
   Set<String> s2 = new HashSet(a2);

   return s1.containsAll(s2);
}
于 2013-01-07T19:22:15.343 に答える
1

配列の1つをループして、その中の各要素に対してcontainsを実行できます

boolean a2ContainsA1 = true;
for(String str: a2){
    if(!a1.contains(str)){
      a2ContainsA1 = false;
}
于 2013-01-07T19:19:20.463 に答える
1

試してみてください(a1を保持したくない場合、またはクローンを作成したくない場合)

boolean conditionVerified = a1.removeAll(a2).isEmpty();
于 2013-01-07T19:22:01.157 に答える
0
boolean contains = true;
for(int i=0 ; i<a1.size() ; i++)
{
  if(!a2.contains(a1[i])
      contains = false;
}

これはあなたが探しているものですか?

于 2013-01-07T19:48:01.393 に答える
0

次のようなListUtilsisEqualList()のメソッドを使用できます-

ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();

boolean isEqual = ListUtils.isEqualList(a1,a2);
于 2013-01-07T19:43:01.820 に答える