【发布时间】:2015-01-14 17:26:43
【问题描述】:
我面临与作者类似的问题: DelayQueue with higher speed remove()?
问题: 我需要处理不断传入的数据,并检查数据是否已经在某个时间范围内看到过。因此,我计算传入数据的唯一 ID,并将该 ID 索引的数据添加到地图中。同时,我将 ID 和超时时间戳存储在 PriorityQueue 中,使我能够有效地检查最新的 ID 是否超时。不幸的是,如果数据在指定的超时之前再次进入,我需要更新存储在 PriorityQueue 中的超时。到目前为止,我刚刚删除了旧 ID 并重新添加了 ID 以及新的超时。这很好用,除了如果我的 PriorityQueue 增长超过 300k 个元素时会使用耗时的 remove 方法。
可能的解决方案: 我只是考虑改用DelayQueue,这样可以更容易地等待第一个数据超时,不幸的是我还没有找到一种有效的方法来更新存储在这种DelayQueue中的超时元素,而不会遇到与使用相同的问题PriorityQueue:remove 方法!
关于如何以有效的方式解决这个问题,即使对于一个巨大的队列有什么想法吗?
【问题讨论】:
标签: java performance queue