Подтвердить что ты не робот

Я уверен, что производительность HashMap vs ArrayList верна

В настоящее время я считаю, что:

  • Если вам нужна структура, из которой вы будете извлекать элементы случайным образом, используйте HashMap
  • Когда вы будете получать элементы в порядке (например, используя цикл for) - используйте ArrayList

Я вообще прав? Существуют ли ситуации, когда это неверно?

4b9b3361

Ответ 1

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

Однако стоит отметить, что ArrayList и HashMap - это всего лишь две реализации интерфейсов List и Map соответственно. Существуют и другие реализации каждого из них, которые могут быть более подходящими для более конкретных требований. Например, LinkedList может обеспечить более высокую производительность, чем ArrayList для определенных требований к очередности/деактивации.

Ответ 2

Карта - это карта или "ассоциативный массив" . Он имеет макет key- > value. С другой стороны, List - это list, который представляет собой упорядоченный набор элементов.

Более прямое сравнение может быть между Set и List: оба значения имеют значение, где список явно упорядочен (вы можете получить элемент # x), а набор (обычно) не (ну, если это не SortedSet, в этом случае порядок итерации будет упорядочен компаратором).

Две наиболее распространенные реализации для Set и List - это HashSet и ArrayList. Чтобы проверить, принадлежит ли элемент в arraylist (содержит (элемент)), реализация выполняет итерацию по всем его элементам, проверяя, нашел ли элемент этот метод equals(). Чтобы проверить, принадлежит ли элемент в hashset, сначала вычисляется элемент hashCode(), затем один идет "прямо" в позицию, где должен находиться этот элемент, и проверяет, существует ли он.

Таким образом, значительная разница между ArrayList и HashSet - это скорость contains().

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

На карте вы можете запросить элемент по его ключу, а не по его индексу, как со списком.

Теперь HashSet реализуется просто с помощью HashMap, где не используется значение value отношения key- > value. Это абсолютно абсурдно и не имеет никакого смысла, кроме траты, по крайней мере, 4 байта, поскольку может утверждать 12, для всех элементов, вставленных в HashSet.

Ответ 3

Я бы сказал, что вы, как правило, правы, но не совсем точны. Вы используете HashMap для извлечения данных, но не всегда произвольно. Вы используете ArrayList для итерации, но вы также можете использовать его для поиска через индекс.

В более общем плане вы используете реализацию Map, когда вам нужно эффективно извлекать элементы путем поиска, т.е. извлекать что-то на основе ключа - например, словари, кеши, репозитории и т.д.

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

Другими словами, вы используете Map как структуру данных индексирования, и используете List, как обычно использовали массивы.

Ответ 4

Для меня это больше, если я забочусь о заказе предметов в коллекции. Если вы позаботились о заказе, используйте ArrayList. Если вы не заботитесь о заказе (просто хотите сохранить кучу элементов), вы можете использовать HashMap.

Ответ 5

Не забывайте, что гораздо быстрее получить один конкретный элемент с картой (если у вас есть ключ), чем из массива (если у вас нет индекса, но ключ всегда будет иметь правильное значение тогда как наличие индекса может не работать, если новые элементы вставлены или старые удалены).

Ответ 6

Я бы не согласился. Для меня это больше зависит от того, как я хочу получить элементы. Если я хочу сделать это на основе чего-то вроде своего порядка (по индексу, если быть точным), я бы использовал линейную структуру, такую ​​как ArrayList (или даже массив). Если мне нужно искать элементы, я бы использовал структуру карты, такую ​​как HashMap.

Другой осложняющий фактор связан с вставками и порядком, о чем указывалось.