例如:我有一个 ArrayList
由点组成。每个点都有一个定义其位置的整数数组。我可以在同一个位置有几个点,然后在每个索引处将它们添加到我的arraylist中。
问题是:
我已经给出了位置,我想检查我的数组列表中是否有任何一点有这个位置。如果是,我就退货。如果有几个点与这个位置,我需要返回最后添加(按时间)。方法equals不起作用。我需要将它与==进行比较,所以我需要正确的引用来引用最新的点。
我该怎么做?
我应该建立另一个独特的点列表,如果在这个列表中是另一个位置相同的点,我应该用新的替换它?
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];
}
}
1条答案
按热度按时间6uxekuva1#
您应该使用另一个或至少一个附加的数据结构。
ArrayList只是一个列表实现,它为您提供了一个动态增长的列表。它不关心插入顺序。
如果你需要的话,你应该找一个linkedhashmap。当然,仅此一点是行不通的:您希望具有相同位置内容的两个点对象实际上是相等的。所以你的Map上只能有一个这样的点。
鉴于目前的情况,可以这样说。要获得更具体的指导,您应该向我们展示
Point
类实现。例如:哪些元素真正进入你的生活equals()
实施?仅此方面就决定了您应该如何组织数据。好吧,一句话:如果你在你的列表中添加多个“相等”的点,并且你只是不断地把它们添加到列表的末尾,那么你可以简单地从后面搜索。第一个匹配点也是最后添加的匹配点。
编辑,给定点类实现。基本上,这个类是没有意义的。它要么缺少其他属性,要么缺少合理的equals/hashcode方法。意思:如果一个点真的只是:一个位置列表。。。或者应该不止这些。
但当一个点只包含位置时,那就意味着:两个位置相等的点应该相等。换句话说:像这样的point类肯定应该有值语义。一个点(0,1)应该等于任何其他点(0,1)!