我一直在阅读HashSetTreeSet的复杂性,到处都有我解释的话题:“ HashSet更快,因为它是O(1)而不是O(log n)。”我当然知道

但是,只有在处理非常大的集合时才适用。另一方面,我需要处理数百万个“小”集,每个“小”集最多包含200个对象,而最多则少得多(少于20个)。它们上的操作非常多样化(创建,添加,删除,成员资格测试,克隆等),因此,我对如何最好地衡量/模拟差异感到困惑。

对于如此小的集合大小,这两个类别中哪一个的开销最少?在速度和内存开销方面。那LinkedHashSet呢?

最佳答案

因此,我对如何最好地衡量/模拟差异感到困惑。


使用探查器。如果“设置”操作未控制结果(CPU时间,内存占用量,分配率),则您选择的内容不会因amdahl's law.而在实践中有所不同。

TreeSet的最大优点是排序。

两种实现方式都不是特别节省内存的,而是根据您最在意的性能指标,有更好的设置。它们是对应Map实现的包装,并且Map本身也不是特别有效。

它们的设计更多是为了灵活性,与优化任何特定性能方面相比,它们提供了广泛的API集。

10-06 00:40