gpt4 book ai didi

java - removeAll() 方法花费很长时间

转载 作者:行者123 更新时间:2023-12-01 19:28:19 26 4
gpt4 key购买 nike

List<Batch> vAllBatchList = getAllBatchCollection().toList(); //Has 700k records
List<Batch> vKeepableBatchCollection = getKeepableBatchCollection(pDaysKeepHistory).toList(); //has 600k records
vAllBatchList.removeAll(vKeepableBatchCollection);

在上面的第 3 行中,removeAll 方法花费了太多时间才能完成。这里如何优化removeAll方法?

最佳答案

如果将要删除的元素的 List 转换为 Set,它应该会更快:

vAllBatchList.removeAll(new HashSet<>(vKeepableBatchCollection));

这是假设 Batch 类正确覆盖 hashCodeequals

说明:ArrayListremoveAll (我假设您的 vAllBatchList List 是一个 ArrayList ) 迭代调用它的 List 的所有元素,并检查传递的 Collection 是否包含它们。如果传递的 CollectionSet,则 contains 将花费预期的恒定时间 (O(1)),而如果 CollectionList,则需要线性时间 (O(n))。

当然,如果你可以直接生成vKeepableBatchCollection元素的Set,而不是先创建一个List,然后将其转换为一个Set,那就更好了。

关于java - removeAll() 方法花费很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60703843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com