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

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

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

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

Ответы [ 6 ]

7 голосов
/ 15 февраля 2010
  • Если какой-либо из них будет работать для вас, я бы использовал HashMap, поскольку при синхронизации, которую Hashtable обеспечивает
  • Я бы предположил, что HashMap является более стандартным и используется чаще. Синхронизированный Hashtable в определенной степени был заменен достижениями в коллекциях и средах параллелизма.
5 голосов
/ 16 февраля 2010

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

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

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

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

1 голос
/ 15 февраля 2010

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

1 голос
/ 15 февраля 2010

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

0 голосов
/ 15 февраля 2010

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

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

  • a HashMap итератор безопасен, а перечислитель для Hashtable - нет.

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

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

0 голосов
/ 15 февраля 2010

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

...