Использование HashMap с целыми числами (индексами) в качестве ключей против использования ArrayList - PullRequest
3 голосов
/ 21 марта 2019

Так что в настоящее время я делаю свою собственную версию Pokemon, реплицированную на Java.Я только недавно познакомился с более продвинутыми структурами данных, и я все еще не уверен, когда одна из них должна быть более подходящей, чем другая.

По сути, я хочу хранить Pokedex (база данных Pokemon)и HashMap кажется, что это будет наилучшим образом.Ключом будет pokedex # для Pokemon, а значением будет рассматриваемый объект Pokemon.Из-за природы pokedex это означает, что pokedex каждого покемона будет просто их соответствующим индексом в pokedex.

Мой вопрос заключается в том, имеет ли смысл использовать HashMap, когда ключи являются просто индексными значениями, или имеет ли смысл хранить Pokedex в виде ArrayList (или даже массива), где каждый Pokemon хранится на своемсоответствующий индекс?

Очевидно, что если я еще не создал определения для каждого покемона, то ArrayList будет неэффективным в памяти, поскольку нам придется резервировать место для каждого покемона, но, насколько я понимаю, ключи в хэш-картах должны бытьиспользуется для создания значений хеша, а не прямых индексов, верно?Или это будет уместно, независимо от того?

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Это действительно зависит. Карта дает вам более высокую степень свободы, тогда как списки / массивы могут привести к последствиям использования таких линейных / последовательных структур данных.

Тогда это зависит от того, насколько "разреженным" будет заполнен ваш массив. Если «ключи» работают от 0 до 1000, с небольшим количеством или без использования неиспользуемых слотов, список подойдет. Если ключи идут от 0 до 10 миллионов, а большинство слотов пустые: используйте карту. Или структура данных, оптимизированная для разреженных матриц.

Кроме того, имейте в виду, что массив не содержит памяти для самих объектов, только для ссылок, указывающих на них. Таким образом, объем памяти массива одинаков, независимо от того, являются ли слоты нулевыми или указывают куда-либо.

1 голос
/ 21 марта 2019

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

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