it-swarm.com.de

Wie werden zwei ArrayLists ohne Duplikate zusammengeführt?

Ich habe zwei ArrayLists

ArrayList one = {A, B, C, D, E}
ArrayList two = {B, D, F, G}  

Ich möchte meine letzte ArrayList haben, die All die Elemente von eins und die Elemente, die nur in zwei und nicht in einem sind.

Also ArrayList final = {A, B, C, D, E, F, G}.

Wie kann ich das machen?

22
Sen
for (Object x : two){
   if (!one.contains(x))
      one.add(x);
}

vorausgesetzt, Sie möchten das im Kommentar vorgeschlagene Set nicht verwenden. Wenn Sie etwas ausgefalleneres suchen, klären Sie bitte Ihre Frage.

36
John B

Entweder:

Set<Foo> fooSet = new LinkedHashSet<>(one);
fooSet.addAll(two);
List<Foo> finalFoo = new ArrayList<>(fooSet);

oder

List<Foo> twoCopy = new ArrayList<>(two);
twoCopy.removeAll(one);
one.addAll(twoCopy);
51
Puce

Versuchen Sie so etwas. Da Set keine Duplikate zulässt, können Sie nur die Änderungen hinzufügen

ArrayList<String> a=new ArrayList<>();
a.add("a");
a.add("b");
ArrayList<String> b=new ArrayList<>();
a.add("a");
a.add("c");
Set<String> s=new HashSet<String>();
s.addAll(a);
s.addAll(b);
a=new ArrayList<>(s);
for(String r:a){
    System.out.println(r);
}
3

sie können so etwas tun:

ArrayList<Object> result = new ArrayList<>();
result.addAll(one);

for(Object e: two){
    if(!result.contains(e))
        result.add(e);
}
2
Ankit