1

重複の可能性:
2 つのリストの共通要素

整数の 2 つのリストを取り、リストを検索して同じ要素を見つけようとしています。次に、すべての共通要素を含む新しいリストが作成されます。同じ位置にある共通の要素を見つけることができますが、異なる位置にはありません。私のコードは以下で見ることができます:

class Share {


public static void main(String[] args) {
    ArrayList<Integer> oneList = new ArrayList<Integer>();
    ArrayList<Integer> twoList = new ArrayList<Integer>();

    oneList.add(8);
    oneList.add(2);
    oneList.add(5);
    oneList.add(4);
    oneList.add(3);

    twoList.add(1);
    twoList.add(2);
    twoList.add(3);
    twoList.add(4);
    twoList.add(5);

    System.out.println(sharedItems(oneList, twoList));
}

static List<Integer> sharedItems(List<Integer> list1, List<Integer> list2) {
    Iterator<Integer> it1 = list1.iterator();
    Iterator<Integer> it2 = list2.iterator();
    int i1 = 0;
    int i2 = 0;
    ArrayList<Integer> shareList = new ArrayList<Integer>();

    while (it1.hasNext()){
        i1 = it1.next();}
    System.out.println(i1);
     while (it2.hasNext()){
            i2 = it2.next();
            if (i1 == i2){
                shareList.add(i1);
        }
    }
    return shareList;
}



}
4

2 に答える 2

3

代わりに Set を使用できます。

Set<Integer> commonIntegers = new HashSet<Integer>(list1).retainAll(list2);

次に、メソッドのシグネチャを変更して、セットをそのまま返すことができます。

static Collection<Integer> sharedItems(...) {
    return new HashSet<Integer>(list1).retainAll(list2);
}

またはリストにラップします:

return new ArrayList<Integer> (commonIntegers);
于 2012-11-06T14:56:16.727 に答える
0

の交差点が必要ですListSetこれは、次のretainAllようなメソッドを使用して実現できます。

static List<Integer> sharedItems(List<Integer> list1, List<Integer> list2) {
    Set<Integer> intersection = new HashSet<Integer>(list1).retainAll(list2);
    return new ArrayList<Integer>(intersection);
}

ここでセット操作について読むことができます: JCF セットの詳細

于 2012-11-06T14:58:29.333 に答える