Hashset vs Treeset
我一直很喜欢树,那漂亮,它们很整洁。但是,我认识的每个软件工程师都尖锐地问我为什么我会使用.从CS背景来看,我认为使用哪个并不重要,我也不在乎弄乱哈希函数和桶(在的情况下)。O(n*log(n))
TreeSet
Java
在哪些情况下我应该使用 a over a ?HashSet
TreeSet
我一直很喜欢树,那漂亮,它们很整洁。但是,我认识的每个软件工程师都尖锐地问我为什么我会使用.从CS背景来看,我认为使用哪个并不重要,我也不在乎弄乱哈希函数和桶(在的情况下)。O(n*log(n))
TreeSet
Java
在哪些情况下我应该使用 a over a ?HashSet
TreeSet
HashSet比TreeSet快得多(对于大多数操作(如添加,删除和包含等大多数操作的常量时间与日志时间),但没有像TreeSet那样提供排序保证。
SortedSet
)first()
,headSet()
和tailSet()
等last()
HashSet
TreeSet
因此,用法的选择完全取决于您的需求,但我觉得即使您需要一个有序的集合,那么您仍然应该更喜欢HashSet来创建集合,然后将其转换为TreeSet。
SortedSet<String> s = new TreeSet<String>(hashSet);
a尚未提及的一个优点是它具有更大的“局部性”,这是说(1)如果两个条目在顺序中附近,则将它们放在数据结构中彼此靠近的简写,因此在内存中;(2)这种放置利用了局部性原则,该原则表明相似的数据通常由具有相似频率的应用程序访问。TreeSet
TreeSet
这与 相反,a 将条目分散到整个内存中,无论它们的键是什么。HashSet
当从硬盘驱动器读取数据的延迟成本是从缓存或RAM读取成本的数千倍时,并且当数据确实以局部性访问时,这可能是一个更好的选择。TreeSet