list - 使用自定义相等函数在 Kotlin 中减去两个列表

标签 list data-structures kotlin

我有两个列表,我想获取只包含第一个列表中不在第二个列表中的元素的列表。问题是我需要在减法时指定一个自定义的 equal。假设我想使用列表条目中的字段之一。假设 id

我是这样实现的:

list1.filter { log -> list2.none { it.id == log.id } }

或者
val projection = logEntries.map { it.id }
list1.filter { it.id !in projection }

有没有更好的方法来做到这一点?请考虑到我无法为该类设置新的 equal 方法。

最佳答案

你这样做的方式没问题,但是当列表变大时,你可能想要这样做:

您可以先将引用列表 ( list2 ) 转换为一组,从而提高流程效率。

val referenceIds = list2.distinctBy { it.id }.toSet()

list1.filter { it.id !in referenceIds }

背景:

当您检查是否包含元素时,您最有可能使用的 ArrayList 的时间复杂度为 O(n)。因此,如果列表变大,则需要更长的时间。

另一方面,在检查是否包含元素时,HashSet 的时间复杂度为 O(1)。所以,如果 list2 变大,它不会变慢。

关于list - 使用自定义相等函数在 Kotlin 中减去两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54513010/

相关文章:

python : Count frequences in dictionary

Python 遍历列表以将项目添加到另一个列表?

c - 删除c中链表中的元素

c++ - C++ 中的 Trie 实现

android - com.app.MainActivity 无法转换为 com.facebook.react.ReactActivity

python - 清除 list 的不同方式

javascript - 在 JavaScript 中维护队列

algorithm - 在不初始化向量的情况下访问元素。我需要额外的空间吗?

android - Android是否具有键盘监听器来检测按下了哪个键?

kotlin - 如何将Java阻塞函数转换为可取消挂起函数?