我有一个赛马对象,它是一个ArrayList,它接受Horse对象。我选择ArrayList是因为它易于实现。但是,使用ArrayList的不利之处在于,如果不花大量时间遍历整个集合,就无法轻易跟踪每匹马的位置。例如,如果我想找到两匹彼此相距X距离之内的马,我将不得不遍历n^2
时间。
有更好的策略来做到这一点吗?
编辑:很多要求具体在我的种族模型,所以我将在这里详细说明。
该模型在每次迭代时都会更新。因此,每匹马都有自己的速度,加速度,行驶距离等,并且每次迭代都会更新这些值。有一个要求,如果一匹马靠近另一匹马,它将放慢速度,我计划通过比较它们的“行进距离”值来做到这一点。
最佳答案
我想您可以将Horse对象添加到TreeSet Collection中。您应该在Horse类中实现Comparable接口(interface),并重写compareTo()方法,从而按距离对马进行排序。然后,您可以对treeSet使用特定的操作,例如“higher()”,该操作将返回运行次数超过给定值的第一匹马,等等。您可以了解有关此集合here的更多信息。同样,所有操作的时间复杂度均为O(lgN)。