例如:
我有一个由点组成的 ArrayList
。每个点都有一个整数数组来定义他的位置。我可以在同一个位置有几个点,然后将它们添加到我想要的每个索引处的 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];
}
}
最佳答案
您应该使用另一个或至少一个额外的数据结构。
ArrayLists 只是一个 List 实现,它为您提供一个动态增长的列表。它不关心插入顺序。
如果您需要它,您应该看看 LinkedHashMap。当然,仅此一项是行不通的:您希望具有相同位置内容的两个 Point 对象事实上相等。所以您的 map 中只能有一个这样的点。
根据当前信息可以这么说。如需更具体的指导,您应该向我们展示 Point
类实现的相关部分。例如:哪些元素确实进入了您的 equals()
实现?仅这一方面就决定了您应该如何组织数据。
好吧,请注意:如果您将多个“相等”点添加到您的列表中,并且您只是将它们附加到您的列表末尾,那么您可以简单地从后端搜索。第一个匹配点也是最后添加的点。
编辑,给定 Point 类实现。基本上,该类(class)毫无意义。 或者它缺少其他属性或者它缺少合理的 equals/hashCode 方法。意思是:如果一个点真的只是一个位置列表……或者它应该更多。
但是当一个点只包含位置时,这意味着:具有相等位置的两个点应该是相等的。换句话说:像这样的 Point 类绝对应该有 value semantics . Point(0, 1) 应该等于任何其他 Point(0, 1)!
关于java - 哪个元素最后添加到 ArrayList 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53658087/