我有一个包含字符串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)时间完成的,但需要一些辅助存储。请让我知道这是否解决了您的问题。