我有兩個的ArrayList如何合併兩個沒有重複的ArrayList?
ArrayList one = {A, B, C, D, E}
ArrayList two = {B, D, F, G}
我想有我最後的ArrayList這將有所有之一的,在一個元件,並且僅在兩個元素不是。
所以 ArrayList final = {A,B,C,D,E,F,G}。
我該怎麼做?
我有兩個的ArrayList如何合併兩個沒有重複的ArrayList?
ArrayList one = {A, B, C, D, E}
ArrayList two = {B, D, F, G}
我想有我最後的ArrayList這將有所有之一的,在一個元件,並且僅在兩個元素不是。
所以 ArrayList final = {A,B,C,D,E,F,G}。
我該怎麼做?
你可以做這樣的事情:
ArrayList<Object> result = new ArrayList<>();
result.addAll(one);
for(Object e: two){
if(!result.contains(e))
result.add(e);
}
嘗試這種事情。由於Set
不允許重複,你可以只添加的變化
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);
}
您的代碼片段不必要的大。假設我們知道如何將它打包成一個'main'並在哪裏找到正常的進口。只需包含代碼。 – 2013-05-13 10:59:25
或者:
Set<Foo> fooSet = new LinkedHashSet<>(one);
fooSet.addAll(two);
List<Foo> finalFoo = new ArrayList<>(fooSet);
或
List<Foo> twoCopy = new ArrayList<>(two);
twoCopy.removeAll(one);
one.addAll(twoCopy);
但是,OP使用的是Java 1.2,因此重寫刪除泛型可能會更好。 – 2013-05-13 19:19:37
對於第二種解決方案,爲什麼我們應該創建一個twoCopy?我們能不能只有一個.removeAll(兩個); one.addAll(二):? – 2016-08-05 03:51:49
只有當您不想修改原始的兩個列表時,您才需要該副本。關於第二個問題:元素的順序不一樣。 – Puce 2016-08-05 07:50:21
使用'Set'可能嗎?這要求列表1中的項目是唯一的。 – 2013-05-13 10:39:32
我不熟悉Set。所以我不喜歡使用它。我的設備中有Java 1.2。 – Sen 2013-05-13 10:46:01
不熟悉是沒有理由避開優秀的數據類型。 'Set'在1.2中可用。你必須回答的問題是:你想在你的最終列表/集合中有任何*重複嗎? – 2013-05-13 10:58:05