我的游戏分为区域网格。每个区域都有一个对象列表。每个对象可以位于 1 个以上的区域(最多 tp 4)。
当一个对象移动时,我检查它所在的区域,如果它们发生变化,我将它们从它们所在的区域中删除并将它们添加到新的区域中。对象的顺序并不重要。我需要快速插入和移除。我永远不需要随机元素访问。
理想的数据结构是什么?
我的游戏分为区域网格。每个区域都有一个对象列表。每个对象可以位于 1 个以上的区域(最多 tp 4)。
当一个对象移动时,我检查它所在的区域,如果它们发生变化,我将它们从它们所在的区域中删除并将它们添加到新的区域中。对象的顺序并不重要。我需要快速插入和移除。我永远不需要随机元素访问。
理想的数据结构是什么?
在每个实体中:
HashSet<Region> regions;
在每个地区:
HashSet<Entity> entities;
您的区域和实体应正确定义 hashCode 和 equals 以获得最佳性能。
当您的实体更改区域时,请先将其从旧区域中删除,然后再从实体中删除区域,然后在将新区域添加到实体后将其添加到新区域。
迭代任何一组都很简单。你没有保证的迭代顺序,但你说那没关系。假设正确定义了 hashCode和HashSet
equals,插入/删除是恒定的时间。
for(Entity entity: entities) {
// do something
}
Simple array of 4 pointers to the Lists corresponding to each region seems fine to me.