Java:比较两个字符串数组和删除两个数组中存在的元素

这主要是一个性能问题.我有一个主列表的所有用户存在于一个String数组AllUids.我还有一个列表的所有结束日期用户存在于一个String数组EndUids.

我正在Java工作,我的目标是从主列表AllUids中删除最后的数组中存在的任何用户.我知道PHP有一个名为array_diff的函数.

我很好奇,如果Java有什么比较两个数组和删除两者相似的元素.我的目标是在这里表演,这就是为什么我问一个内置的功能.我不想添加任何特殊的包.

我想到编写一个递归函数,但是它似乎效率很低.两个列表中都有数千个用户.为了存在于结束日期列表中,您必须存在于AllUids列表中,即直到删除.

例:

String[] AllUids = {"Joe", "Tom", "Dan", "Bill", "Hector", "Ron"};

String[] EndUids = {"Dan", "Hector", "Ron"};

功能我正在寻找:

String[] ActiveUids = AllUids.RemoveSimilar(EndUids);

ActiveUids将如下所示:

{"Joe", "Tom", "Bill"}

谢谢你们,
显然我可以想出这样的循环,但我并不相信它会有效率.这是每天在生产机器上运行的东西.

最佳答案
Commons Collections有一个名为CollectionUtils的类和一个叫做removeAll的静态方法,它将从列表中删除一个初始列表和一个要删除的东西:

Collection removeAll(Collection collection,
                     Collection remove)

这应该做你想要的,只要你使用用户列表,而不是数组.您可以使用Arrays.asList()非常容易地将您的数组转换成列表,所以…

Collection ActiveUids = CollectionUtils.removeAll(Arrays.asList(AllUids), 
                                                  Arrays.asList(EndUids))

编辑:我也在Commons Collections中进行了一些挖掘,并在Commons Collections中找到了ListUtils的以下解决方案:

List diff = ListUtils.subtract(Arrays.asList(AllUids), Arrays.asList(EndUids));

很整洁

转载注明原文:Java:比较两个字符串数组和删除两个数组中存在的元素 - 代码日志