私のゲームはリージョンのグリッドに分割されています。各リージョンには、オブジェクトのリストが含まれています。各オブジェクトは複数のリージョンに存在できます(最大tp 4)。
オブジェクトが移動するとき、それがどの領域にあるかを確認し、それらが変更された場合は、それらがあった領域からそれらを削除して、新しい領域に追加します。オブジェクトの順序は重要ではありません。迅速な挿入と取り外しが必要です。ランダムな要素へのアクセスは必要ありません。
このための理想的なデータ構造は何でしょうか?
私のゲームはリージョンのグリッドに分割されています。各リージョンには、オブジェクトのリストが含まれています。各オブジェクトは複数のリージョンに存在できます(最大tp 4)。
オブジェクトが移動するとき、それがどの領域にあるかを確認し、それらが変更された場合は、それらがあった領域からそれらを削除して、新しい領域に追加します。オブジェクトの順序は重要ではありません。迅速な挿入と取り外しが必要です。ランダムな要素へのアクセスは必要ありません。
このための理想的なデータ構造は何でしょうか?
各エンティティで:
HashSet<Region> regions;
各地域で:
HashSet<Entity> entities;
リージョンとエンティティはhashCodeを定義する必要があり、最高のパフォーマンスを得るには適切に等しくなります。
エンティティがリージョンを変更する場合は、エンティティからリージョンを削除する前に古いリージョンから削除し、エンティティに新しいリージョンを追加した後、新しいリージョンに追加します。
どちらかのセットを繰り返すのは簡単です。反復順序は保証されていませんが、それは問題ではないとおっしゃいました。またHashSet
、適切に定義されたhashCodeと等しいと仮定すると、挿入/削除は一定時間です。
for(Entity entity: entities) {
// do something
}
各地域に対応するリストへの4つのポインターの単純な配列は私には問題ないようです。