web-dev-qa-db-ja.com

2つの配列リストから共通の値を削除する方法

2つのArrayListから共通の値を削除するにはどうすればよいですか。以下に示すように2つのArraylistがあると考えてみましょう

ArrayList1= [1,2,3,4]
ArrayList1= [2,3,4,6,7]

結果を出したい

ArrayListFinal= [1,6,7]

誰か助けてくれませんか?

16
Gautam

タスクを達成するために従うことができるアルゴリズムはここにあります:

  • 2つの配列の和集合を作成します
  • 2つの配列の交差を作成します
  • 交差点をユニオンから減算して、結果を取得します

Javaコレクションは addAllremoveAll 、および retainAll をサポートします。 addAllを使用してユニオンを作成し、retainAllを使用して交差を作成し、removeAllを使用して減算します。 このように

// Make the two lists
List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
List<Integer> list2 = Arrays.asList(2, 3, 4, 6, 7);
// Prepare a union
List<Integer> union = new ArrayList<Integer>(list1);
union.addAll(list2);
// Prepare an intersection
List<Integer> intersection = new ArrayList<Integer>(list1);
intersection.retainAll(list2);
// Subtract the intersection from the union
union.removeAll(intersection);
// Print the result
for (Integer n : union) {
    System.out.println(n);
}
38
dasblinkenlight

実際に Symmetric Difference を求めています。

List<Integer> aList = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
List<Integer> bList = new ArrayList<>(Arrays.asList(2, 3, 4, 6, 7));
// Union is all from both lists.
List<Integer> union = new ArrayList(aList);
union.addAll(bList);
// Intersection is only those in both.
List<Integer> intersection = new ArrayList(aList);
intersection.retainAll(bList);
// Symmetric difference is all except those in both.    
List<Integer> symmetricDifference = new ArrayList(union);
symmetricDifference.removeAll(intersection);

System.out.println("aList: " + aList);
System.out.println("bList: " + bList);
System.out.println("union: " + union);
System.out.println("intersection: " + intersection);
System.out.println("**symmetricDifference: " + symmetricDifference+"**");

プリント:

aList: [1, 2, 3, 4]
bList: [2, 3, 4, 6, 7]
union: [1, 2, 3, 4, 2, 3, 4, 6, 7]
intersection: [2, 3, 4]
**symmetricDifference: [1, 6, 7]**
18
OldCurmudgeon

次のようなものを使用できます。

    ArrayList <Integer> first = new ArrayList <Integer> ();
    ArrayList <Integer> second = new ArrayList <Integer> ();
    ArrayList <Integer> finalResult = new ArrayList <Integer> ();

    first.add(1);
    first.add(2);
    first.add(3);
    first.add(4);

    second.add(2);
    second.add(3);
    second.add(4);
    second.add(6);
    second.add(7);

    for (int i = 0; i < first.size(); i++){

        if (!second.contains(first.get(i))){

            finalResult.add(first.get(i));
        }
    }


    for (int j = 0; j < second.size(); j++){

        if (!first.contains(second.get(j))){

            finalResult.add(second.get(j));
        }

    }

投稿で説明したように、2つのArrayListを作成し、それらの両方で個別の要素を確認しました。そのような要素が見つかった場合は、それらをfinalResult ArrayListに追加します。

私はそれがあなたを助けることを願っています:)

4
Survivor
SetList<Integer> A = new SetList<Integer>();
A.addAll({1,2,3,4});

SetList<Integer> B = new SetList<Integer>();
B.addAll({2,3,4,6,7});

Integer a = null;

for (int i=0; i<A.size(); i++)
{
    a = A.get(i);

    if (B.contains(a)
    {
        B.remove(a);
        A.remove(a);
        i--;
    }
}

SetList<Integer> final = new SetList<Integer>();
final.addAll(A);
final.addAll(B);

// final = { 1, 6, 7 }
0
Khaled.K