【问题标题】:What is a time complexity for sets and maps created with a factory methods Set.of() and Map.of()?使用工厂方法 Set.of() 和 Map.of() 创建的集合和映射的时间复杂度是多少?
【发布时间】:2019-08-19 12:49:38
【问题描述】:

在 Java 中,当我创建带有 Set.of()set 或带有 Map.of()map 时,containsget 操作的时间复杂度是多少?是 O(1) 吗?

【问题讨论】:

  • 它们是不可修改的,您不能将add 转换为Set.of() 返回SetSource
  • 好的,get 呢?
  • 使用 forEach() 方法。
  • 我问的是时间复杂度。如果 Map 中有 10000 个项目,取决于实现,它可以是 O(1) 或 O(logN)

标签: java collections java-9


【解决方案1】:

Set.ofMap.of API 返回 JDK 私有实现的实例。规范不保证这些实现的性能。但是,API 会返回关于可以做出哪些性能声明的特定实现。因此,这个问题是合理的,并且与诸如“Map.get 的性能如何?”之类的(假设的)问题不同。这是一个糟糕的问题,因为有许多不同的 Map 实现。

在任何情况下,Set.of(大于 2 的大小)和 Map.of(大于 1 的大小)背后的实现都使用简单的开放寻址散列方案和线性探测来解决冲突。如果元素的(键)哈希分布合理,Set.containsMap.get 操作是 O(1)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2011-05-14
    • 1970-01-01
    • 2019-07-24
    相关资源
    最近更新 更多