是否有机会在一次传递中更新TreeMap中最小键入口(firstEntry())的键? 因此,例如,如果我使用pollFirstEntry(),则需要O(log n)时间来检索和删除条目。然后,我创建一个带有所需键的新条目并将其放回TreeMap,它也需要O(log n)时间。因此,我花费O(2 log n)时间,在逻辑上可能只是O(1 + log n)=(log n)时间。
我很乐意避免删除该条目,但在firstEntry()方法捕获时更新它。 如果TreeMap无法实现,那么任何人都可以建议像数据结构那样的替代PriorityQueue,尽可能更新最少条目的密钥。
答案 0 :(得分:1)
O(2 log N)
被正确地视为O(log N)
。但是没有,不能像在地图中的条目中那样改变到另一个位置(在树中)。几乎唯一没有这个数据结构的是一个键值对列表,这是一个可怕的O(N)
或您可能想要的O(N/2)
。
如果密钥可以用作巨大数组中的索引,则O(1)
将保持,仍然有2个操作。