我有一個包含字符串2數組列表:比較字符串的ArrayList
List1 = [no, yes, ok, not]
List2 = [no, but, vote, check]
現在,我該如何比較列表1與列表2並刪除列表1的話,如果同一個詞在列表2中。排序的詞(沒有相同的詞)存儲在另一個數組列表中。
結果應該是這樣的:
List3 = [yes, ok, not]
我有一個包含字符串2數組列表:比較字符串的ArrayList
List1 = [no, yes, ok, not]
List2 = [no, but, vote, check]
現在,我該如何比較列表1與列表2並刪除列表1的話,如果同一個詞在列表2中。排序的詞(沒有相同的詞)存儲在另一個數組列表中。
結果應該是這樣的:
List3 = [yes, ok, not]
如果你希望將結果保存在一個新的列表,你需要先克隆列表1:
ArrayList list3 = (ArrayList) list1.clone();
或
ArrayList list3 = new ArrayList(list1);
然後用removeAll:
list3.removeAll(list2);
ArrayList
提供方法以除去所有存在於另一個列表對象。
參考Removing elements present in collection
在你的情況list1.removeAll(list2)
應該解決您的問題
您可以創建第三個列表,添加到您的這兩個列表,並發現它第三個列表同樣的話。當你找到它們時,刪除一個。所以你會用equals()來檢查你的第三個列表。
我想你並不瞭解ArrayList的removeAll(Collection c)方法,或者只是想要另一種方法。
既然你提到,你需要從列表1中刪除重複的話,初始化一個HashSet和list2中添加所有值的設置,像這樣,
Set<String> set = new HashSet<String>();
for(String s: list2)
set.add(s);
現在,做相同的克隆的list1,注意從list1中刪除字符串。
String[] list3 = new String[list1.size()];
list1.toArray(list3);
for(String s: list3)
if(!set.add(s))
list1.remove(s);
這是在O(n)時間完成的,但需要一些輔助存儲。請讓我知道這是否解決了您的問題。