删除另一个arraylist中存在的arraylist中的所有对象

我正在尝试从两个文件读入并将它们存储在两个单独的arraylists中。 这些文件由一行中的单词或由逗号分隔的多个单词组成。 我用以下代码读取每个文件(不完整):

ArrayList temp = new ArrayList(); FileInputStream fis; fis = new FileInputStream(fileName); Scanner scan = new Scanner(fis); while (scan.hasNextLine()) { Scanner input = new Scanner(scan.nextLine()); input.useDelimiter(","); while (scan.hasNext()) { String md5 = scan.next(); temp.add(md5); } } scan.close(); return temp; 

我现在需要读取两个文件并删除第一个文件中的所有单词,这些单词也存在于第二个文件中(文件中有一些重复的单词)。 我尝试过for循环和其他类似的东西,但没有任何工作,所以任何帮助将不胜感激!

奖金问题:我还需要找出两个文件中有多少重复项 – 我通过将两个arraylists添加到HashSet然后从两个arraylists的组合大小中减去集合的大小来完成此操作 – 这是一个好的解决方案,还是可以做得更好?

您可以使用removeAll方法从另一个列表中删除一个列表中的项目。

要获得重复项,您可以使用retainAll方法,尽管您使用该方法的方法也很好(并且可能更有效)

收集设施有一个方便的方法:

 list1.removeAll(list2); 

首先,您需要在自定义类中覆盖等于方法,并定义删除列表的匹配条件

 public class CustomClass{ @Override public boolean equals(Object obj) { try { CustomClass licenceDetail = (CustomClass) obj; return name.equals(licenceDetail.getName()); } catch (Exception e) { return false; } } } 

其次,您调用removeAll()方法

list1.removeAll(列表2);

正如其他人所提到的,如果您希望从正在调用removeall on的Collection中删除一个Collection中存在的所有元素,请使用Collection.removeAll方法。

至于你的奖金问题,我是Guava’s Sets课程的忠实粉丝。 我建议使用Sets.intersection如下:

 Sets.intersection(wordSetFromFile1, wordSetFromFile2).size(); 

假设您从两个文件中创建了一组单词,您可以确定它们与该一个单元格有多少不同的单词。