我有一个赛道对象,它是一个接收Horse对象的ArrayList。我选择了ArrayList,因为它易于实现。然而,使用ArrayList的缺点是我无法轻松跟踪每匹马的位置,而无需昂贵地迭代整个集合。例如,如果我想找到彼此相距X个距离的2匹马,我将不得不迭代n^2
次。
有更好的策略吗?
编辑:很多要求在我的种族模型上具体要求,所以我在这里详细说明。
每次迭代都会更新模型。因此,每匹马都有自己的速度,加速度,行进距离等,并且通过集合的每次迭代都会更新这些值。有一个要求,如果一匹马在另一匹马附近,它会减速,我打算通过比较他们的旅行距离来做到这一点。值。
答案 0 :(得分:1)
我想你可以将Horse对象添加到TreeSet Collection中。您应该在Horse类中实现Comparable接口并覆盖compareTo()方法,从而按距离对马匹进行排序。然后你可以在treeSet上使用特定的操作,例如" higher()"这将返回第一匹跑得比一匹马更多的马等。你可以阅读更多关于这个集合的信息here。此外,所有操作都是按时间复杂度的O(lgN)。
答案 1 :(得分:0)
如果您在马位置更新中维护一个排序列表,那么您可以确定在一次扫描中距离相隔X对的所有马匹,N次(权衡是保持列表排序,每次更新记录(n))。
如果您希望所有马匹与给定马匹的距离为H.您还可以保留马匹到阵列索引的哈希图,并可能避免迭代整个阵列。