2016-01-22 133 views
0

我有一个包含字符串2数组列表:比较字符串的ArrayList

List1 = [no, yes, ok, not] 
List2 = [no, but, vote, check] 

现在,我该如何比较列表1与列表2并删除列表1的话,如果同一个词在列表2中。排序的词(没有相同的词)存储在另一个数组列表中。

结果应该是这样的:

List3 = [yes, ok, not] 

回答

4

如果你希望将结果保存在一个新的列表,你需要先克隆列表1:

ArrayList list3 = (ArrayList) list1.clone(); 

ArrayList list3 = new ArrayList(list1); 

然后用removeAll

list3.removeAll(list2); 
0

您可以创建第三个列表,添加到您的这两个列表,并发现它第三个列表同样的话。当你找到它们时,删除一个。所以你会用equals()来检查你的第三个列表。

0

我想你并不了解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)时间完成的,但需要一些辅助存储。请让我知道这是否解决了您的问题。