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データ構造は、「このセットにはこのアイテムが含まれていますか」という質問に答えるという 1 つの目的だけのために設計されています。他の用途では、必ずしも最も効率的ではありません。

あなたの使用には、キューがより良い選択であるように思われます。

于 2013-03-14T20:04:35.313 に答える