优化数据获取

问题描述

我有一个 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),则效率不高行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...