问题描述
我有一个 TreeMap
private final TreeMap<Integer,sxssfRow> rows = new TreeMap<>();
但我想在恒定时间 O(1) 内从 rows
检索数据
这样您就不必在每次迭代时都在后面阅读 (log n)。
我能为此做些什么?
也许将数据从 TreeMap 转移到另一个数据结构,但它会高效吗?
解决方法
如果您想在恒定时间内进行查找,即使在最坏的情况下,您也需要除 Map
数据类型之外的其他内容。
使用 TreeMap
,查找在所有情况下都是 O(log n)。
使用 HashMap
,查找平均为 O(1),但在最坏的情况下可以达到 O(n)。
如果你想在所有情况下进行 O(1) 查找,你需要一个数组,但数组的大小可能会变得太大而无法使用。如果你对键做了一些事情,比如模数或散列来减小数组的大小,恭喜你,你只是在最坏的情况下重新发明了 HashMap
(使用 O(n)因为碰撞的情况)。
顺便说一句,对于HashMap或数组,转移到另一个数据结构将花费O(n),因此如果您读取的内容少于O(n),则效率不高行。