2013-03-22 30 views
7

2つのArrayListから共通の値を削除するにはどうしたらいいですか? は、私は誰もが私を助けてもらえ2つの配列リストから共通の値を削除する方法

ArrayListFinal= [1,6,7] 

として結果を持っていると思い

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

以下のように私は2つのArrayListを持って考えることができますか?ここで

+5

その後、私たちはあなたを助けるでしょう、それを試してみてください。 –

+0

共通の要素を削除したい場合 – SRy

+2

ヒント:リストのAPIを読むと、あなた自身で問題を解決できます。 – Sanchit

答えて

28

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

  • は、組合からの交差点を引く二つの配列
  • の交差点を構築する二つの配列
  • の労働組合を構築します

Javaコレクションあなたの結果を得るaddAllremoveAll、およびretainAllをサポートしています。労働組合、交差点を構築するためのretainAll、および減算のためremoveAlllike thisを構築するためにaddAllを使用します。

// 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); 
} 
+0

返信ありがとう...これは私が探していたものです:) :) – Gautam

+0

注:これを動作させるには、@override equals()が必要です。 – Gewure

0
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 } 
13

あなたが実際に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]** 
+0

返信ありがとうございました...それは私が探していたものです:) :) – Gautam

+0

@OldCurmudgeon [1、2、3、4,6,7]のような出力が必要な場合はどうすればいいですか? –

+1

@ KK_07k11A0585 - それは '対称差分'と '交差点'の '合併 'です。 – OldCurmudgeon

3

あなたはこのようなものを使用することができます:あなたがあなたの記事でそれらを説明するように、私はちょうど2つのArrayListを埋め、と私はそれらの両方にチェックを

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)); 
     } 

    } 

を明確な要素については、そのような要素が見つかった場合は、finalResult ArrayListに追加します。

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

関連する問題