【发布时间】:2020-06-12 10:34:49
【问题描述】:
Java 中 Set 的 remove 方法的时间复杂度是多少?我知道在 ArrayList 中 remove 方法的时间复杂度是 O(n),但想确认 Sets 也一样吗?
【问题讨论】:
-
发帖前你搜索了吗?
-
你可以从第一个谷歌搜索结果中得到答案。
标签: java collections set
Java 中 Set 的 remove 方法的时间复杂度是多少?我知道在 ArrayList 中 remove 方法的时间复杂度是 O(n),但想确认 Sets 也一样吗?
【问题讨论】:
标签: java collections set
根据基础实现,List / Set 中的删除可以是O(1)、O(n) 或O(log n)(或其他一些更复杂的深奥实现)。
ArrayList remove 是 O(n) 除了最后一个元素。删除ArrayList 中的最后一个元素是O(1)(递减大小计数器并将元素设置为null)。
现在您询问的是一个接口 (Set),它至少有两个实现 (TreeSet、HashSet),它们都提供了不同的删除时间复杂度,就像 LinkedList 中的情况一样列表案例(例如,O(1) 去除了头部)。
set 接口不保证移除的上限,但任何健全的 set 实现最糟糕的是 O(log n) 我想 :)
【讨论】: