例如:
我有一个ArrayList
,由点组成。每个点都有一组定义其位置的整数。我可以在同一位置放置几个点,并将它们添加到我想要的每个索引的ArrayList中。
问题是:
我已经给出了位置,我想检查ArrayList的任何点是否都具有该位置。如果是,我将其退回。如果这个职位的分数很少,我需要返回最后添加的(按时间)。方法等于将不起作用。我需要将其与==进行比较,因此我需要正确引用最新点。
我应该怎么做?
我应该建立另一个唯一点列表,如果在这个列表中是另一个位置相同的点,我应该用较新的点替换它吗?
public class Point {
private final int DIMENSIONS;
private final int[] position;
public Point(int dimensions) {
DIMENSIONS = dimensions;
position = new int[DIMENSIONS];
}
public void setPosition(int dim, int value) {
position[dim] = value;
}
public int getPosition(int dim) {
return position[dim];
}
}
答案 0 :(得分:3)
您应该使用另一个或至少一个附加的数据结构。
ArrayLists只是一个List实现,它为您提供了一个动态增长的列表。它不在乎插入顺序。
如果需要,您应该看一下LinkedHashMap。当然,仅靠这种方式是行不通的:您希望具有相同位置内容的两个Point对象实际上是 equal 。因此,您在地图中只能有一个这样的点。
在给出当前信息的情况下可以这样说。有关更具体的指导,您应该向我们展示Point
类实现的相关部分。例如:您的equals()
实现中确实包含哪些元素?仅这方面就决定了如何组织数据。
好吧,一句话:如果您在列表中添加多个“相等”的点,而只需将它们附加到列表的末尾,则只需从后端进行搜索即可。那么第一个匹配的Point也是最后添加的那个。
编辑,给出Point类的实现。基本上,该类是没有意义的。 或者缺少其他属性 ,或者缺少合理的equals / hashCode方法。意思是:如果一个Point确实就是那个:一个位置列表...或者应该比该位置更多。
但是,当一个点仅包含位置时,则意味着:两个具有等于位置的点应该相等。换句话说:这样的Point类肯定应该具有value semantics。 Point(0,1)应该等于任何其他Point(0,1)!