Java中两个列表<字符串>的有效交集?

2022-08-31 13:07:33

问题很简单:

我有两个列表

List<String> columnsOld = DBUtils.GetColumns(db, TableName);
List<String> columnsNew = DBUtils.GetColumns(db, TableName);

我需要得到这些的交集。有没有一种快速的方法来实现这一点?


答案 1

您可以使用 retainAll 方法:

columnsOld.retainAll (columnsNew);

答案 2

使用谷歌的番石榴库:

Sets.intersection(Sets.newHashSet(setA), Sets.newHashSet(setB))

注意:这比天真地用两个列表进行交集要有效得多:它是O(n + m),而不是列表版本的O(n×m)。对于两百万个项目列表,这是数百万个操作和数万亿个操作之间的差异。