哪一个元素最后被添加到ArrayList?

时间:2018-12-06 19:05:27

标签: java list collections

例如: 我有一个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];
    }
}

1 个答案:

答案 0 :(得分:3)

您应该使用另一个或至少一个附加的数据结构。

ArrayLists只是一个List实现,它为您提供了一个动态增长的列表。它不在乎插入顺序。

如果需要,您应该看一下LinkedHashMap。当然,仅靠这种方式是行不通的:您希望具有相同位置内容的两个Point对象实际上是 equal 。因此,您在地图中只能有一个这样的点。

在给出当前信息的情况下可以这样说。有关更具体的指导,您应该向我们展示Point类实现的相关部分。例如:您的equals()实现中确实包含哪些元素?仅这方面就决定了如何组织数据。

好吧,一句话:如果您在列表中添加多个“相等”的点,而只需将它们附加到列表的末尾,则只需从后端进行搜索即可。那么第一个匹配的Point也是最后添加的那个。

编辑,给出Point类的实现。基本上,该类是没有意义的。 或者缺少其他属性 ,或者缺少合理的equals / hashCode方法。意思是:如果一个Point确实就是那个:一个位置列表...或者应该比该位置更多

但是,当一个点仅包含位置时,则意味着:两个具有等于位置的点应该相等。换句话说:这样的Point类肯定应该具有value semantics。 Point(0,1)应该等于任何其他Point(0,1)!