【问题标题】:What data strucutre does *mutableSetOf()* return in Kotlin?*mutable list()* 在 Kotlin 中返回什么数据结构?
【发布时间】:2020-09-19 20:09:10
【问题描述】:

它是实现为 HashSet、链接 HashSet 还是二叉搜索树?

我知道它是为封装而隐藏的,但我需要估计渐近运行时间。

【问题讨论】:

  • 如果您需要特定的实现,请明确调用。 mutableSetOf 返回的是一个可以改变的实现细节。

标签: kotlin data-structures collections constructor set


【解决方案1】:

查看标准库的源代码可能会很有趣且具有启发性——但今天mutableSetOf()发生返回的内容并不重要,因为这可能会在未来的 Kotlin 版本中发生变化。

重要的是the documentation 没有提到类,只是MutableSet 接口。这就是 JetBrains 所做的一切,因此您可以放心地假设。 您不应该依赖特定的实施选择,如果这不是合同的一部分。

(他们唯一指定的另一件事是“返回的集合保留了元素的迭代顺序。”所以你知道它不能返回 HashSet,但事实并非如此。但这仍然留下了几种当前的可能性,并且未来可能会更多。Oracle 或 JetBrains 可能会提出一个新的实现,它具有更好的一般或最坏情况下的性能,或其他一些理想的特性。)

将结果向下转换为 LinkedHashSet 在今天可能可行,但在未来的 Kotlin 版本中可能会因 ClassCastException 而失败。 (或者更糟糕的是,它可能在大多数时间都起作用,然后在你不期待它的时候抛出ClassCastException。)

所以,如果您有特定的性能要求,那么您最好明确创建您想要的类型。

mutableSetOf() 适用于当您没有有特定要求,并且只想要一些简单但总体上可能表现良好的东西。

【讨论】:

    【解决方案2】:

    在我的 kotlin stdlib 安装中查找实现:

    public inline fun <T> mutableSetOf(): MutableSet<T> = LinkedHashSet()
    

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 2019-04-12
      • 1970-01-01
      相关资源
      最近更新 更多