我的游戏分为区域网格。每个区域都有其中的对象列表。每个对象可以在1个以上的区域(向上TP 4)。
当一个对象移动时,我检查它所在的区域,如果它们更改为"我"将它们从它们所在的区域中删除,并将它们添加到新的区域中。对象顺序并不重要。我需要快速插入和去除。我将永远不需要随机元素访问。
这是什么理想的数据结构?
在每个实体中:
HashSet<Region> regions;
在每个区域中:
HashSet<Entity> entities;
您的区域和实体应定义哈希码并正确地等于最佳性能。
当您的实体更改区域时,将其从旧区域中删除,然后再将区域从实体中删除,然后在将新区域添加到实体后将其添加到新区域。
迭代任一组很简单。您没有保证的迭代顺序,但是您说这没关系。HashSet
插入/删除是恒定的时间,假设正确定义了hashcode并等于
for(Entity entity: entities) {
// do something
}
与我相对应的4个指针的简单数组对我来说很好。