1

ある配列リストの値のいずれかが別の配列リストに存在するかどうかを確認する必要があります。

import java.util.ArrayList;

public class SampleCode {

    ArrayList<Integer> in = new ArrayList<>();
    ArrayList<Integer> is = new ArrayList<>();
    public static void main(String[] args) {
        new SampleCode().work();
    }
    public void work(){
        in.add(3);in.add(4);in.add(5);
        is.add(1);is.add(2);is.add(3);
        if(is.containsAll(in)){
            System.out.println("It does not contain");
        }
    }
}

「含まれていません」と表示されます。これら 2 つの配列リストを比較する方法があるかどうかを知る必要があり、値のいずれかが他の配列リストに存在する場合は、 を返す必要がありfalseます。繰り返しが役立つことを知っています。これを行う簡単な方法はありますか?

4

6 に答える 6

1
   Collection.indexOfSubList(List<?> source, List<?> target)

指定されたソース リスト内で指定されたターゲット リストが最初に出現する開始位置を返します。そのような出現がない場合は -1 を返します。

より正式には、source.subList(i, i+target.size()).equals(target) となる最小のインデックス i を返します。そのようなインデックスがない場合は -1 を返します。(target.size() > source.size() の場合は -1 を返します。) この実装では、ソース リストをスキャンする「ブルート フォース」手法を使用し、各位置でターゲットとの一致を順番に探します。

Collections.disjoint(Collection<?> c1, Collection<?> c2)

指定された 2 つのコレクションに共通の要素がない場合は true を返します。

Collection の一般的な規約に準拠していないコレクションに対してこのメ​​ソッドを使用する場合は、注意が必要です。実装は、いずれかのコレクションを反復処理し、もう一方のコレクションに含まれているかどうかをテストする (または同等の計算を実行する) ことを選択できます。いずれかのコレクションが非標準の等価性テストを使用する場合 (順序付けが equals または IdentityHashMap のキー セットと互換性がない SortedSet と同様)、両方のコレクションが同じ非標準の等価性テストを使用する必要があります。そうしないと、このメソッドの結果が未定義になります。含まれる要素に制限があるコレクションを使用する場合も注意が必要です。コレクションの実装は、不適格と見なされる要素を含む操作に対して例外をスローすることが許可されています。絶対的な安全のために、指定されたコレクションには、両方のコレクションに適した要素である要素のみを含める必要があります。両方のパラメータに同じコレクションを渡すことができることに注意してください。その場合、メソッドはコレクションが空の場合にのみ true を返します。

投げる

NullPointerException- 1 つのコレクションに null 要素が含まれていて、null が他のコレクションの適格な要素ではない場合。(オプション) NullPointerException - 1 つのコレクションに null 要素が含まれ、null が他のコレクションの適格な要素でない場合。(オプション) ClassCastException - 一方のコレクションに、もう一方のコレクションに不適格なタイプの要素が含まれている場合。(オプション)

于 2013-10-25T13:22:01.110 に答える
1

これを試してみてください

public void work(){
        in.add(3);in.add(4);in.add(5);;
        is.add(1);is.add(2);is.add(3);;
        ArrayList<Integer> matched = new ArrayList<Integer>(in);
        matched.retainAll(is);
        if(matched.size()>0){
            System.out.println(matched);
        }else{
            System.out.println("It does not contain");
        }
    }
于 2013-10-25T13:19:50.743 に答える
0
public boolean isListNotOverlapping(List<Integer> yourList1, List<Integer> yourList2) {
    for(Integer i : yourList1) {
         if (yourList2.contains(i)) {
             return false;
         }
    }
    return true;
}
于 2013-10-25T13:20:56.260 に答える