【发布时间】:2014-04-03 14:54:28
【问题描述】:
由于集合只能具有唯一值,这是否意味着每次将元素添加到集合时,它必须检查它是否等于那里的每个元素,因此是 O(n)?
如果在这种情况下,这会使它们比 arrayLists 慢得多,那么您真正应该使用它们的唯一时间是确保您的元素都是唯一的,或者它们还有其他优势吗?
【问题讨论】:
-
哪种语言和哪种容器? std::set 有一个插入方法,它需要 O(log(size()))。
-
这取决于
set的实现。 C++ 中的std::set通常实现为红黑树,并保证插入复杂度为 O(log(n)) (source)。 -
这取决于Set的实现。在 Java 中的每个示例中,将元素添加到 HashSet 是
O(1)(假设您的哈希函数均匀地分布您的元素)。但是在 TreeSet 中它是O(log(n))
标签: java c++ data-structures set