В общих случаях, когда один из них будет работать, что лучше использовать, хэш-карту или хеш-таблицу?
Я иногда использовал хеш-таблицы на нескольких языках, но я только наткнулся на карту 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
так как Hashtable
синхронизируется, и, следовательно, потребляет больше вычислительных ресурсов.
Hashtable
является одним из оригинальных классов коллекции в Java, в то время как HashMap
является частью Collections Framework, добавленной в Java 2. Основные отличия:
доступ к
Hashtable
синхронизируется на столе во время доступа кHashMap
нет. Вы можете добавить его, но его там нет по умолчанию.HashMap
итератор отказоустойчив, а перечислитель дляHashtable
нет.HashMap
разрешает нулевые значения в нем, в то время какHashtable
не делает.
Так что вы бы пойти с HashMap
для любого нового кода. Если вам нужна синхронизация, вам лучше Collections.synchronizedMap(HashMap)
, Посмотрите эту аналогичную тему для большего количества идей.
HashMap
для локальных переменных или параметров метода, потому что они потокобезопасны.