Как вытащить объект со специальным идентификатором из стека? - PullRequest
0 голосов
/ 02 декабря 2011

В моем карточном игровом проекте я имитирую карточную кучу со стеком. Каждая карта стопки / колоды имеет уникальный идентификатор.

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

Ответы [ 4 ]

1 голос
/ 02 декабря 2011

Вы можете называть «колоду карт» стеком, но это не следует путать со структурой данных стека. Я рекомендую две структуры данных для ваших карточных объектов в вашей игре:

  1. Список, чтобы сохранить некоторую форму заказа (чтобы вы знали, в каком порядке находятся карты). ArrayList будет хорошо работать здесь.

  2. HashHap для быстрого поиска (помните, карта обычно теряет свой порядок).

Поскольку одна и та же карта будет присутствовать в обеих структурах данных, вы не будете использовать намного больше памяти, но будете иметь преимущества обеих структур данных (быстрый поиск и упорядочение). Вам придется немного поработать, но этого и следовало ожидать.

0 голосов
/ 02 декабря 2011

Ну вот так работает стек.Чтобы получить что-то, кроме верхнего предмета из стека, вам нужно сложить все предметы и поместить их в другой стек, пока не найдете свой предмет.Затем вам нужно вытолкнуть все предметы из другой стопки и вернуть их обратно в исходную стопку.

Это то, что вы бы сделали, если бы тоже искали карту вручную.

0 голосов
/ 02 декабря 2011

Стек - это LIFO, и вы должны высовывать предметы, пока не найдете нужный. Затем сдвиньте выскочившие предметы назад. Вы должны использовать что-то вроде карты, чтобы легче получить предмет с идентификатором.

0 голосов
/ 02 декабря 2011

Вы также можете оставить Map<Key, Card> для отслеживания карт по их уникальному идентификатору (Key может быть String, Integer и т. Д.).Затем вы можете вызвать remove(Object), который Stack наследует от Vector, передав Card, который вы хотели удалить.

Это предполагает, что вы ограничены Stack структура данных, которой вы не можете быть (см. Другие ответы).

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