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