2017-01-21 8 views
-1

Карта (или HashMap) занимает постоянное время для вставки, удаления и извлечения. В то время как все другие структуры данных, которые я знаю до сих пор, не принимают постоянного времени, и их время для вышеуказанных операций зависит от размера ввода.Зачем нам нужны структуры данных, кроме HashMap

Итак, зачем нам нужны все другие структуры данных? Разве HashMap не является универсальной структурой данных?

+0

'Не HashMap является универсальной структурой данных' - нет, она не сохраняет элементы заказа и не позволяет дубликаты и не позволит вам получить доступ к элементам по индексу и ... – rkosegi

+0

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

+0

Где вы узнали, что Insert, Remove and Retrieve принимает постоянное время? ['Эта реализация обеспечивает постоянную производительность для основных операций (get and put), предполагая, что хеш-функция правильно распределяет элементы среди ковшей.'] (Https://docs.oracle.com/javase/8/docs/ api/java/util/HashMap.html), и поскольку вы не можете предоставить хеш-функцию, но используется встроенный тип типа ... – TheConstructor

ответ

1

Карта Производительность не является бесплатной, а стоимость - память и сложность.

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

Например, если у вас есть определенный список строк элементов, и единственное, что у вас есть в коде, - это распечатать именно этот список элементов, тем лучше использовать массив строк.

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

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

+0

«где вам не нужны представления», вы используете разные структуры данных, когда вы делаете * заботитесь о производительности.Например, вы можете эмулировать «Список » с помощью «Map » (например, JS с массивами). Но производительность будет намного хуже, чем использование 'ArrayList'. –

+0

@AndyTurner esp, если вы хотите, чтобы индексы менялись при вставке или удалении. –

+0

@ AndyTurner Я имел в виду выступления в доступе к значению, как спрашивал OP. –

0

HashMap не следует использовать при

  • простой объект Java будет делать эту работу. Объекты Java безопасны по типу и более эффективны.
  • , если вам нужна отсортированная коллекция.
  • , когда ключ является Enum.
  • , когда индекс равен int, начиная с 0.
  • , когда ключ может измениться.
  • , если вы хотите одновременный доступ.
  • , если вам требуется какой-либо заказ или приоритет в вашей коллекции.
  • , когда вам нужен набор вещей (т.е. нет значения)