【发布时间】:2014-04-11 07:37:58
【问题描述】:
HashMap: intialCapacity=1000; loadFactor=0.75;
上面的意思是,HashMap 将重新调整大约 1000*75 = 750 th entry 到 2000 的大小。此时会进行重新散列吗?如果是,那么性能会受到怎样的影响?如果没有,那么什么时候?在 MAX_CAPACITY?
TreeMap:没有重新散列,而是排序。文档表明插入/读取/搜索始终为 O(log N)。但是,排序/新条目/删除条目不是总是重新调整整个 TreeMap 的大小吗?
就上述场景和整体性能而言,两者在 BigO 表示法方面如何比较?
HashMap 和 ConcurrentHashMap 是高度使用的实现,但相比之下,TreeMap 的使用并不多。我同意只添加和很少删除但经过高度搜索的 TreeMap 最好优于 HashMap/table 实现。
感谢任何评论。
编辑: 在数据结构摊销方面,应该考虑的最佳实践的性能最差情况是什么?就像重新散列基于哈希的 MAP 和/或调整基于树的 Map 或集合的大小。有一定的权衡,但假设由于高度不可预测的吞吐量而不断地要求修改数据结构。
【问题讨论】:
-
请注意,就大 O 而言,我们不考虑数组调整大小和树重新平衡之类的事情,因为它是一种概括所使用算法类型的方法,并不代表确切的性能。哈希表的插入总是 O(1),红黑树的插入总是 O(log(n))。
-
@Radiodef,了解。但是,这是我正在寻找答案的一块。 Big-O 是算法的最佳方案,但实际上并不理想。当哈希图重新散列和/或树图调整大小以访问/插入/搜索时间时会发生什么?这是我最坏的情况吗?差多少?比较器/可比较的排序或使用是否会生效?什么时候?
-
嗯,重要的是,就性能而言,哈希表的访问性能将优于任何其他数据结构。在您需要排序的情况下,红黑树将胜过任何其他数据结构。当调整大小/重新排序的东西发生时,你当然会得到一个小小的突突,但大多数数据结构需要不时地做这样的事情。
-
顺便说一句measurements have been made before on HashMap parameters。它们很难准确量化。
-
这是一个很棒的链接。感谢您的信息。
标签: java collections