Какой элемент был добавлен в ArrayList как последний? - PullRequest
0 голосов
/ 06 декабря 2018

Например: у меня есть 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 голосов
/ 06 декабря 2018

Вы должны использовать другую или, по крайней мере, дополнительную структуру данных.

ArrayLists - это просто реализация List, которая дает вам список, который динамически увеличивается.Это не заботится о порядке вставки.

Если вам это нужно, вам лучше обратиться к LinkedHashMap.Конечно, это само по себе не сработает: вы хотите, чтобы два объекта Point с одинаковым содержимым позиции были на самом деле равными .Таким образом, вы можете иметь только один такой пункт на вашей карте.

Это то, что можно сказать, учитывая текущую информацию.Для более подробного руководства вы должны показать нам соответствующие части реализации класса Point.Например: какие элементы действительно входят в вашу реализацию equals()?Один этот аспект определяет, как вы должны организовать свои данные.

Ну, одно замечание: если вы добавляете несколько «равных» точек в свой список, и вы просто продолжаете добавляя их в конецваш список, то вы можете просто искать с заднего конца.Первая совпадающая точка также является той, которая была добавлена ​​последней.

Редактировать, учитывая реализацию класса Point.По сути, этот класс не имеет смысла. Либо , либо отсутствуют другие атрибуты , либо , но отсутствуют разумные методы equals / hashCode.Значение: если точка действительно является просто списком позиций ... или она должна быть на больше , чем эта.

но если точка содержит только позиции, то это означает: дваточки с равными позициями должны быть равны.Другими словами: класс Point, подобный этому, обязательно должен иметь семантику значений .Точка (0, 1) должна быть равна любой другой точке (0, 1)!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...