我正在运行一些基准测试。我的一个测试取决于顺序,所以我正在使用TreeSet。我的第二个测试没有,所以我正在使用HashSet。
我知道TreeSet的插入速度较慢。但是如何迭代所有元素呢?
答案 0 :(得分:1)
来自类似的帖子(Hashset vs Treeset):
HashSet比TreeSet快得多(对于大多数操作,例如add,remove和contains,常量时间与日志时间相比),但不提供像TreeSet这样的排序保证。
first()
,last()
,headSet()
和tailSet()
等HashSet
和TreeSet
之间。实现为具有贯穿其的链表的哈希表,但它提供插入顺序迭代,这与TreeSet保证的排序遍历不同。因此,使用的选择完全取决于您的需求,但我觉得即使您需要有序集合,您仍然应该更喜欢HashSet来创建Set,然后将其转换为TreeSet。
Set<String> s = new TreeSet<String>(hashSet);
答案 1 :(得分:1)
TreeSets
内部使用TreeMaps
Red Black Trees
(特殊类型的BST
)。
BST
Inorder遍历为O(n)
HashSets
内部使用HashMaps
使用array
来保存Entry对象。
此处遍历也应为O(n)
。
除非你写一个基准,否则很难证明哪个更快。
答案 2 :(得分:0)
如果您想要(几乎)HashSet
的性能稳定排序,请使用LinkedHashSet
。你仍然会得到恒定时间的操作,而我会假设TreeSet
会得到你的对数时间。