В общих случаях, когда один из них будет работать, что лучше использовать, хэш-карту или хеш-таблицу?

Я иногда использовал хеш-таблицы на нескольких языках, но я только наткнулся на карту Java, просматривая некоторый код. Я проверил различия в этом вопросе SO, который выразил это очень ясно. У меня вопрос такой:

  • Когда кто-то может работать на вас, что лучше использовать? Какой из них выбрать, если вы не имеете дело с нулями / потоками...?

  • Какой из них используется чаще / является более стандартным?

6 ответов

Решение
  • Если любой из них будет работать для вас, я бы использовал HashMap как было бы накладные расходы в синхронизации, Hashtable обеспечивает
  • Я полагаю, что HashMap является более стандартным и используется чаще. Синхронизированный Hashtable в определенной степени был заменен достижениями в коллекциях и параллелизмом.

Hashtable старше. Он был отправлен уже в JDK 1.0. В 1.2, когда была представлена ​​структура коллекций, Hashtable была определена как проблема, так как она была реализована с синхронизацией всех открытых методов. Это была мера предосторожности, которая необходима только в многопоточных контекстах и ​​в противном случае снижает производительность (некоторые люди указали, что это можно было бы оптимизировать, но YMMV).

К сожалению, было невозможно просто удалить синхронизацию, поскольку некоторый код уже полагался на Hashtable, реализованный таким образом. Следовательно, HashMap родился. Пока они занимались этим, они добавили функцию "разрешить пустые значения" и адаптировали ее к общей структуре коллекций.

То же самое произошло со StringBuffer, новая несинхронизированная версия которого называется StringBuilder.

Итак, вкратце: используйте HashMap: это новейшая и наиболее продуманная реализация. Hashtable является наследием. Если вы хотите синхронизированную реализацию, вы можете выбрать Hashtable или Collections.synchronizedMap(Map).

HashMap, потому что он работает быстрее.

Для общего пользования выберите HashMap так как Hashtable синхронизируется, и, следовательно, потребляет больше вычислительных ресурсов.

Hashtable является одним из оригинальных классов коллекции в Java, в то время как HashMap является частью Collections Framework, добавленной в Java 2. Основные отличия:

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

  • HashMap итератор отказоустойчив, а перечислитель для Hashtable нет.

  • HashMap разрешает нулевые значения в нем, в то время как Hashtable не делает.

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

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

Другие вопросы по тегам