从另一个性能中减去一个ArrayList

问题描述 投票:1回答:1

我想从另一个中减去一个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分钟,但无法完成。 如何让执行更快?

performance optimization groovy collections
1个回答
1
投票

Person是否实施Comparable?如果是这样,Groovy将进行1,046,089次操作。如果没有,它将采取较慢的路径并进行34,000,000,000次操作(see the code for minus here

所以你应该能够通过使Person实现Comparable来使它快34,000倍Groovy然后将使用TreeSet;将所有listOne添加到其中,然后删除所有listTwo

如果你不能使它具有可比性...嗯......你能预先对列表进行排序吗?

如果是这样,我们可能会想出一个同时遍历两个列表的算法......这可能会更快......

© www.soinside.com 2019 - 2024. All rights reserved.