我想从另一个中减去一个ArrayList
@ToString
@EqualsAndHashCode
class Person
{
PersonGender gender
String name
String surname
}
static def substractList(ArrayList<Person> listOne, ArrayList<Person> listTwo) {
listOne.minus listTwo
// listOne has 200k elements
// listTwo has 170k elements
}
代码已运行40分钟,但无法完成。 如何让执行更快?
Person
是否实施Comparable
?如果是这样,Groovy将进行1,046,089次操作。如果没有,它将采取较慢的路径并进行34,000,000,000次操作(see the code for minus here)
所以你应该能够通过使Person
实现Comparable
来使它快34,000倍Groovy然后将使用TreeSet;将所有listOne
添加到其中,然后删除所有listTwo
如果你不能使它具有可比性...嗯......你能预先对列表进行排序吗?
如果是这样,我们可能会想出一个同时遍历两个列表的算法......这可能会更快......