0

好的,所以我重新编写了帖子以使其更容易理解(对不起所有的粘贴箱,但堆栈溢出对于代码格式来说是愚蠢的)

请注意,我不打算存储如下所述的荒谬数据量。我使用我所说的量的主要原因是尽可能多地挤出效率。

假设我有以下代码

将添加到 DropItemQueue 的方法(从 floodFill(深度为 0)开始,其他参数无关紧要)

http://pastebin.com/3wqEb5cM

这是同一个类,然后它将调用 Utils 中的 dropItem 方法

http://pastebin.com/yEUW9Wad

我的 Utils.dropItem 方法如下

http://pastebin.com/c0eaWeMA

这是 ServerTickHandler.addDropItemQueue 方法及其变量存储

http://pastebin.com/Q4p5a4ja

这是 DropItemQueue 类

http://pastebin.com/wxCj9imN

如果我说向这个哈希集添加 100000000 个元素,我注意到它需要大约 2 秒

使用此迭代器迭代哈希集中的所有内容每 1/20 秒调用一次

http://pastebin.com/zSWg1kKu

每次迭代 2 秒似乎并不多,但要摆脱存储在哈希集中的每个元素,需要大约 50 天的时间

每次将元素解析为哈希集时,maxTicks 比之前添加的元素多 1,因此基本上每 1 秒删除一个项目,但由于迭代所有内容需要 2 秒,因此实际上需要 3 秒才能删除一个项目,这将使大约需要 150 天来完成迭代并刷新每个元素并完成

我的问题是拥有多个具有较少最大元素的哈希集会更快吗?比如说 1000 个元素。

是的,这会给我 100000 个哈希集,但是由于它们每个都更小,所以迭代时间会变慢(无论是效率的微小提高)还是有更好的东西我可以使用而不是哈希集或者哈希集是最好的利用?

请注意,如果我确实使用了较小迭代的多次迭代,由于跨线程数据冗余,我无法使用线程

4

1 回答 1

1

数据结构的HashSet设计实际上只有一个目的,即回答“这个集合是否包含这个项目”这个问题。对于任何其他用途,它不一定是最有效的。

对于您的使用,队列似乎是一个更好的选择。

于 2013-03-14T20:04:35.313 回答