Различия между HashMap и Hashtable?

2848
голосов

В чем разница между HashMap и Hashtable в Java?

Что более эффективно для не-потоковых приложений?

задан dmanxiii 02 сент. '08 в 23:12
источник

37 ответов

  • 1
  • 2
2930
голосов

Существует несколько отличий между HashMap и Hashtable в Java:

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

  • Hashtable не позволяет использовать null ключи или значения. HashMap позволяет использовать один ключ null и любое количество значений null.

  • Один из подклассов HashMap LinkedHashMap, поэтому в случае, если вам нужен предсказуемый порядок итерации (который является вставкой по умолчанию), вы можете легко заменить HashMap на LinkedHashMap. Это было бы не так просто, если бы вы использовали Hashtable.

Поскольку синхронизация для вас не является проблемой, я бы рекомендовал HashMap. Если синхронизация становится проблемой, вы также можете посмотреть ConcurrentHashMap.

ответ дан Josh Brown 03 сент. '08 в 2:02
источник
540
голосов

Обратите внимание, что в большинстве ответов указано, что Hashtable синхронизирована. На практике это очень мало покупает. Синхронизация в методах accessor/mutator остановит два потока, добавляя или удаляя с карты одновременно, но в реальном мире вам часто потребуется дополнительная синхронизация.

Очень распространенная идиома заключается в том, чтобы "проверить, затем поставить", то есть искать запись на карте и добавить ее, если она еще не существует. Это никоим образом не атомная операция, если вы используете Hashtable или HashMap.

Эквивалентно синхронизированный HashMap можно получить:

Collections.synchronizedMap(myMap);

Но для правильной реализации этой логики вам нужна дополнительная синхронизация формы:

synchronized(myMap) {
    if (!myMap.containsKey("tomato"))
        myMap.put("tomato", "red");
}

Даже итерация над записями Hashtable (или HashMap, полученная Collections.synchronizedMap) не является потокобезопасной, если вы также не защищаете карту от модификации с помощью дополнительной синхронизации.

Реализации интерфейса ConcurrentMap (например ConcurrentHashMap) разрешите часть этого, включив потокобезопасную семантику check-then-act, например:

ConcurrentMap.putIfAbsent(key, value);
ответ дан serg10 03 сент. '08 в 14:00
источник
277
голосов

Никто не упомянул о том, что Hashtable не является частью Java Collections Framework - он просто предоставляет аналогичный API. Кроме того, Hashtable считается устаревшим кодом. Нет ничего о Hashtable, которое невозможно сделать с помощью HashMap или дериваций HashMap, поэтому для нового кода я не вижу никаких оправданий для возврата к Hashtable.

ответ дан aberrant80 25 июня '09 в 4:46
источник
136
голосов

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

  • Класс HashMap примерно эквивалентен Hashtable, за исключением того, что он не синхронизирован и разрешает null. (HashMap допускает нулевые значения как ключ и значение, тогда как Hashtable не разрешает значения null).
  • HashMap не гарантирует, что порядок карты будет оставаться неизменным с течением времени.
  • HashMap не синхронизируется, тогда как Hashtable синхронизируется.
  • Итератор в HashMap является отказоустойчивым, в то время как перечислитель для Hashtable не является и бросает ConcurrentModificationException, если какой-либо другой поток модифицирует структуру структурно, добавляя или удаляя любой элемент, кроме собственного метода remove() Iterator. Но это не гарантированное поведение и будет сделано JVM с наилучшими усилиями.

Примечание о некоторых важных условиях

  • Синхронизированный означает, что только один поток может изменить хэш-таблицу в какой-то момент времени. По сути, это означает, что любой поток перед выполнением обновления на хэш-таблице должен будет получить блокировку объекта, в то время как другие будут ждать освобождения блокировки.
  • Отказоустойчивость относится к контексту итераторов. Если итератор был создан в объекте коллекции, а какой-либо другой поток пытается изменить объект коллекции "структурно", будет выбрано исключение параллельной модификации. Для других потоков можно использовать хотя бы вызов метода "set", так как он не модифицирует коллекцию "структурно". Однако, если до вызова "set" коллекция была изменена структурно, будет выбрано "IllegalArgumentException".
  • Структурная модификация означает удаление или вставку элемента, который мог бы эффективно изменить структуру карты.

HashMap можно синхронизировать с помощью

Map m = Collections.synchronizeMap(hashMap);

Карта предоставляет представления коллекции вместо прямой поддержки итерации  через объекты Enumeration. Взгляды коллекции значительно улучшают  выразительность интерфейса, как обсуждается далее в этом разделе.  Карта позволяет выполнять итерацию по ключам, значениям или парам ключ-значение;  Hashtable не предоставляет третий вариант. Карта обеспечивает безопасный способ  для удаления записей в середине итерации; Hashtable этого не делал.  Наконец, Map исправляет незначительный недостаток в интерфейсе Hashtable.  Hashtable имеет метод, называемый contains, который возвращает true, если  Hashtable содержит заданное значение. Учитывая его название, вы ожидаете этого  метод для возврата true, если Hashtable содержал данный ключ, потому что  ключ является основным механизмом доступа для Hashtable. Карта  интерфейс устраняет этот источник путаницы, переименовывая метод  containsValue. Кроме того, это улучшает согласованность интерфейса -  containsValue parallels containsKey.

Интерфейс карты

ответ дан sravan 04 окт. '11 в 9:39
источник
93
голосов

Имейте в виду, что HashTable был унаследованным классом до того, как была внедрена библиотека Java Collections Framework (JCF) и позже была модернизирована для реализации интерфейса Map. Так было Vector и Stack.

Поэтому всегда держитесь подальше от них в новом коде, поскольку в JCF всегда есть лучшая альтернатива, как указывали другие.

Вот сборник чит-карт Java, который вы найдете полезным. Обратите внимание, что серый блок содержит устаревший класс HashTable, Vector и Stack.

enter image description here

ответ дан pierrotlefou 25 марта '14 в 11:58
источник
89
голосов

HashMap: реализация интерфейса Map, который использует хэш-коды для индексации массива. Hashtable: Привет, 1998. Они хотят вернуть API их коллекций.

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

ответ дан Apocalisp 03 сент. '08 в 2:14
источник
52
голосов

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

Также обратите внимание, что Hashtable расширяет класс Dictionary, который как состояние Javadocs устарел и был заменен на Map.

ответ дан matt b 02 сент. '08 в 23:30
источник
45
голосов

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

Матрица Java Collection

ответ дан Sujan 20 нояб. '12 в 8:35
источник
35
голосов

Hashtable похож на HashMap и имеет аналогичный интерфейс. Рекомендуется использовать HashMap, если вам не нужна поддержка устаревших приложений или вам нужна синхронизация, поскольку методы Hashtables синхронизированы. Таким образом, в вашем случае, поскольку вы не многопоточны, HashMaps - ваш лучший выбор.

ответ дан Miles D 02 сент. '08 в 23:25
источник
26
голосов

Другое ключевое различие между hashtable и hashmap заключается в том, что Iterator в HashMap работает с ошибкой, в то время как перечислитель для Hashtable не является и бросает ConcurrentModificationException, если какой-либо другой поток модифицирует структуру структурно, добавляя или удаляя любой элемент, кроме собственного Итератора remove (). Но это не гарантированное поведение и будет выполняться JVM с наилучшими усилиями ".

Мой источник: http://javarevisited.blogspot.com/2010/10/difference-between-hashmap-and.html

ответ дан Neerja 08 сент. '11 в 9:40
источник
26
голосов

Помимо всех других важных аспектов, уже упомянутых здесь, API коллекций (например, интерфейс карты) постоянно изменяется, чтобы соответствовать последним и самым большим дополнениям к спецификации Java.

Например, сравните Java 5 Map iterating:

for (Elem elem : map.keys()) {
  elem.doSth();
}

против старого подхода Hashtable:

for (Enumeration en = htable.keys(); en.hasMoreElements(); ) {
  Elem elem = (Elem) en.nextElement();
  elem.doSth();
}

В Java 1.8 мы также обещаем построить и получить доступ к HashMaps, как в старых старых сценариях:

Map<String,Integer> map = { "orange" : 12, "apples" : 15 };
map["apples"];

Обновление: Нет, они не приземлятся в 1.8...: (

Могут ли улучшения коллекции Coin в JDK8?

ответ дан pwes 12 янв. '12 в 12:17
источник
23
голосов
  • HashTable синхронизируется, если вы используете его в одном потоке, вы можете использовать HashMap, который является несинхронизированной версией. Несинхронизированные объекты часто немного более эффективны. Кстати, если несколько потоков одновременно обращаются к HashMap, и по крайней мере один из потоков изменяет структуру структурно, он должен быть синхронизирован извне. Youn может обернуть несинхронизированную карту в синхронизированном режиме, используя:

    Map m = Collections.synchronizedMap(new HashMap(...));
    
  • HashTable может содержать только ненулевой объект как ключ или как значение. HashMap может содержать один нулевой ключ и нулевые значения.

  • Итераторы, возвращаемые Map, работают с ошибкой, если карта структурно модифицирована в любое время после создания итератора, любым способом, кроме метода собственного удаления итератора, итератор будет бросать ConcurrentModificationException, Таким образом, перед лицом одновременной модификации итератор быстро и чисто, а не рискует произвольным, недетерминированным поведением в неопределенное время в будущем. В то время как перечисления, возвращаемые с помощью ключей и элементов Hashtable, не являются быстрыми.

  • HashTable и HashMap являются членами Java Collections Framework (поскольку платформа Java 2 v1.2, HashTable была модернизирована для реализации Map).

  • HashTable считается устаревшим кодом, в документации рекомендуется использовать ConcurrentHashMap вместо Hashtable, если поточно- желательно выполнить параллельную реализацию.

  • HashMap не гарантирует порядок возврата элементов. Для HashTable я предполагаю, что это одно и то же, но я не совсем уверен, я не нахожу ressource, который четко заявляет об этом.

ответ дан alain.janinm 29 апр. '12 в 16:57
источник
22
голосов

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

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

ответ дан Giovanni Azua 10 дек. '12 в 11:57
источник
20
голосов

Различия между HashMap и Hashtable в Java:

1) Thread Safe

  • HashTable внутренне синхронизирован.
  • Поэтому очень удобно использовать HashTable в многопоточных приложениях.
  • Где HashMap не синхронизирован внутренне.
  • Поэтому небезопасно использовать HashMap в многопоточных приложениях без внешней синхронизации.
  • Вы можете синхронизировать HashMap извне с помощью метода Collections.synchronizedMap().

2) Унаследовано от

  • Хотя оба интерфейса HashMap и HashTable реализуют интерфейс Map, но они расширяют два разных класса.
  • HashMap расширяет класс AbstractMap, где, поскольку HashTable расширяет класс Dictionary, который является унаследованным классом в java.

3) Нулевые ключи и нулевые значения

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

4) Обход

  • HashMap возвращает только Итераторы, которые используются для перемещения по элементам HashMap.
  • HashTable возвращает Iterator, а также Enumeration, который может использоваться для перемещения по элементам HashTable.

5) Fail-Fast Vs Fail-Safe

  • Итератор, возвращаемый HashMap, несовместим с природой, то есть они бросают ConcurrentModificationException, если HashMap изменен после создания Итератора, кроме итератора, собственный метод remove().
  • С другой стороны, перечисление, возвращаемое HashTable, является отказоустойчивым по своей природе, то есть они не выбрасывают никаких исключений, если HashTable изменяется после создания Enumeration.

6) Производительность

  • Поскольку HashTable внутренне синхронизирован, это делает HashTable немного медленнее, чем HashMap.

7) Класс Legacy

  • HashTable - это унаследованный класс.
  • Он считается почти неприемлемым.
  • Поскольку JDK 1.5, ConcurrentHashMap считается лучшим вариантом, чем HashTable.

8) Член Framework для Java

  • HashMap является членом Java Collection Framework с самого начала его внедрения в JDK 1.2.
  • Но HashTable был там до JDK 1.2. Из JDK 1.2 было сделано для реализации интерфейса Map, что делает его частью структуры коллекции.

разница между хэш-таблицей и хеш-таблицей

Что более эффективно для не-потоковых приложений?

  • Hashtable синхронизируется, а HashMap - нет.

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

ответ дан Preya 30 сент. '16 в 10:18
источник
19
голосов

Hashtable синхронизируется, а HashMap - нет. Это делает Hashtable медленнее, чем Hashmap.

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

ответ дан izb 02 сент. '08 в 23:22
источник
14
голосов

Основываясь на информации здесь, я бы рекомендовал пойти с HashMap. Я думаю, что самым большим преимуществом является то, что Java не позволит вам изменить его, пока вы выполняете итерацию по нему, если вы не сделаете это через итератор.

ответ дан pkaeding 02 сент. '08 в 23:14
источник
14
голосов

Уже есть много хорошего ответа. Я добавляю несколько новых точек и суммирую их.

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

HashMap

1) HashMap не синхронизирован. Он не является потокобезопасным и не может быть разделен между многими потоками без надлежащего кода синхронизации.
2) HashMap разрешает один нулевой ключ и несколько нулевых значений.
3) HashMap - новый класс, введенный в JDK 1.2.
4) HashMap быстро.
5) Мы можем сделать HashMap синхронизированным, вызвав этот код
       Map m = Collections.synchronizedMap(HashMap);
6) HashMap проходит через Итератор.
7) Итератор в HashMap работает быстро.
8) HashMap наследует класс AbstractMap.

Hashtable

1) Hashtable синхронизируется. Он является потокобезопасным и может использоваться совместно со многими потоками.
2) Hashtable не допускает никакого нулевого ключа или значения.
3) Hashtable - это унаследованный класс. 4) Hashtable является медленным.
5) Hashtable внутренне синхронизирована и не может быть несинхронизирована.
6) Hashtable проходит через перечислитель и итератор.
7) Перечислитель в Hashtable не работает быстро.
8) Hashtable наследует класс словаря.

Дальнейшее чтение В чем разница между HashMap и Hashtable в Java?

введите описание изображения здесь

ответ дан roottraveller 06 марта '17 в 13:09
источник
13
голосов

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

ответ дан Tim Howland 03 сент. '08 в 1:38
источник
12
голосов

Разница между HashMap и HashTable/HashMap vs HashTable

  • Синхронизация или потоковая безопасность: это самое важное различие между двумя. HashMap не синхронизирован, а не потокобезопасен. С другой стороны, HashTable является потокобезопасным и синхронизированным. Когда использовать HashMap? Ответ: если ваше приложение не требует многопоточной задачи, другими словами hashmap лучше для приложений без потоковой передачи. HashTable следует использовать в многопоточных приложениях.

  • Нулевые ключи и нулевые значения: Hashmap позволяет использовать один нулевой ключ и любое количество нулевых значений, в то время как Hashtable не допускает нулевые ключи и значения null в объекте HashTable.

  • Итерирование значений: значения объекта Hashmap повторяются с помощью итератора .HashTable - это единственный класс, отличный от вектора, который использует перечислитель для итерации значений объекта HashTable.

  • Неудачный итератор: итератор в Hashmap является отказоустойчивым итератором, а перечислитель для Hashtable - нет. Согласно Oracle Docs, если Hashtable структурно модифицируется в любое время после создания итератора любым способом, кроме метода удаления iterator, то итератор будет вызывать ConcurrentModification Exception. Структурная модификация означает добавление или удаление элементов из объекта Collection (здесь hashmap или hashtable). Таким образом, перечисления, возвращаемые ключами и элементами Hashtable, не ускоряются быстро. Мы уже объяснили разницу между итератором и перечислением.

  • Производительность: Hashmap работает намного быстрее и использует меньше памяти, чем Hashtable, поскольку прежняя несинхронизирована. Несинхронизированные объекты часто намного лучше в производительности по сравнению с синхронизированным объектом, например Hashtable, в однопоточной среде.

  • Суперкласс и наследие: Hashtable является подклассом класса Dictionary, который теперь устарел в Jdk 1.7, поэтому он больше не используется. Лучше синхронизировать внешнюю синхронизацию HashMap или использовать реализацию ConcurrentMap (например, ConcurrentHashMap).HashMap является подклассом класса AbstractMap. Хотя Hashtable и HashMap имеют разные суперклассы, но оба они являются реализациями абстрактных типов данных "Карта".

ответ дан Moitt 07 мая '15 в 21:27
источник
10
голосов

Помимо упомянутых различий, следует отметить, что, поскольку Java 8, HashMap динамически заменяет Узлы (связанный список), используемые в каждом ведре с TreeNodes (красно-черным деревом), так что даже если высокие хэш-коллизии существуют, худший случай при поиске -

O (log (n)) для HashMap Vs O (n) в Hashtable.

* Вышеупомянутое улучшение еще не применялось к Hashtable, но только к HashMap, LinkedHashMap и ConcurrentHashMap.

FYI, в настоящее время

  • TREEIFY_THRESHOLD = 8: если ведро содержит более 8 узлов, связанный список преобразуется в сбалансированное дерево.
  • UNTREEIFY_THRESHOLD = 6: когда ведро становится слишком маленьким (из-за удаления или изменения размера) дерево преобразуется обратно в связанный список.
ответ дан Konstantinos Chalkias 04 мая '16 в 18:04
источник
9
голосов

Существует 5 основных различий с HashTable и HashMaps.

  • Карты позволяют выполнять итерацию и извлечение ключей, значений и обеих пар ключ-значение, где HashTable не обладает всей этой возможностью.
  • В Hashtable есть функция contains(), которая очень запутанна в использовании. Потому что смысл содержания немного отклоняется. Значит ли это, содержит ключ или содержит значение? трудно понять. То же самое в Maps имеет функции ContainsKey() и ContainsValue(), которые очень легко понять.
  • В hashmap вы можете удалить элемент во время итерации, безопасно. где это невозможно в хэш-таблицах.
  • Хэш-таблицы по умолчанию синхронизированы, поэтому их можно легко использовать с несколькими потоками. Где по умолчанию HashMaps не синхронизируется, поэтому их можно использовать только с одним потоком. Но вы можете преобразовать HashMap в синхронизированный с помощью функции Collections util class synchronizedMap (Map m).
  • HashTable не разрешает нулевые ключи или нулевые значения. Где, поскольку HashMap допускает один нулевой ключ и несколько нулевых значений.
ответ дан user1923551 11 дек. '13 в 15:45
источник
9
голосов

1. Hashmap и HashTable и сохранить ключ и значение.

2. Hashmap может хранить один ключ как null. HashTable не может хранить null.

3. Hashmap не синхронизируется, но HashTable синхронизируется.

4. Hashmap можно синхронизировать с Collection.SyncronizedMap(map)

Map hashmap = new HashMap();

Map map = Collections.SyncronizedMap(hashmap);
ответ дан Rahul Tripathi 27 авг. '14 в 14:29
источник
9
голосов

Мой небольшой вклад:

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

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

  • Третья разница в Hashtable vs HashMap заключается в том, что Hashtable является устаревшим классом, и вы должны использовать ConcurrentHashMap вместо Hashtable в Java.

ответ дан Shreyos Adikari 19 марта '14 в 0:46
источник
7
голосов

HashTable является устаревшим классом в jdk, который больше не должен использоваться. Замените его использование ConcurrentHashMap. Если вы не нуждаетесь в безопасности потоков, используйте HashMap, который не является threadsafe, но быстрее и использует меньше памяти.

ответ дан jontejj 15 апр. '13 в 17:49
источник
6
голосов

1) Hashtable синхронизируется, а hashmap - нет. 2) Еще одно отличие заключается в том, что итератор в HashMap является отказоустойчивым, а перечислитель для Hashtable - нет. Если вы измените карту во время итерации, вы узнаете.

3) HashMap разрешает в нем нулевые значения, а Hashtable - нет.

ответ дан raja 22 янв. '13 в 8:31
источник
5
голосов

HashMap: - Это класс, доступный внутри пакета java.util, и он используется для хранения элемента в формате ключа и значения.

Hashtable: -Это унаследованный класс, который распознается внутри рамки коллекции

ответ дан Ankit 31 янв. '13 в 16:41
источник
4
голосов

Hashtable:

Hashtable - это структура данных, которая сохраняет значения пары ключ-значение. Он не разрешает null для обоих ключей и значений. Вы получите NullPointerException, если вы добавите нулевое значение. Он синхронизирован. Таким образом, это связано с его стоимостью. Только один поток может получить доступ к HashTable в определенное время.

Пример:

import java.util.Map;
import java.util.Hashtable;

public class TestClass {

    public static void main(String args[ ]) {
    Map<Integer,String> states= new Hashtable<Integer,String>();
    states.put(1, "INDIA");
    states.put(2, "USA");

    states.put(3, null);    //will throw NullPointerEcxeption at runtime

    System.out.println(states.get(1));
    System.out.println(states.get(2));
//  System.out.println(states.get(3));

    }
}

HashMap

HashMap похож на Hashtable, но также принимает пару значений ключа. Он позволяет использовать null для обоих ключей и значений. Его производительность лучше, чем HashTable, потому что это unsynchronized.

Пример:

import java.util.HashMap;
import java.util.Map;

public class TestClass {

    public static void main(String args[ ]) {
    Map<Integer,String> states = new HashMap<Integer,String>();
    states.put(1, "INDIA");
    states.put(2, "USA");

    states.put(3, null);    // Okay
    states.put(null,"UK");

    System.out.println(states.get(1));
    System.out.println(states.get(2));
    System.out.println(states.get(3));

    }
}
ответ дан IntelliJ Amiya 10 февр. '15 в 10:44
источник
4
голосов

HashMap и HashTable

  • Некоторые важные моменты в HashMap и HashTable.  пожалуйста, прочтите ниже подробные сведения.

1) Hashtable и Hashmap реализуют интерфейс java.util.Map 2) Hashmap и Hashtable - это коллекция, основанная на хеше. и работает над хэшированием. поэтому это сходство HashMap и HashTable.

  • В чем разница между HashMap и HashTable?

1) Первое отличие заключается в том, что HashMap не является потокобезопасным, а HashTable - ThreadSafe
2) HashMap работает лучше, потому что он не является потокобезопасным. в то время как производительность Hashtable мудрая не лучше, потому что это потокобезопасная. поэтому несколько потоков не могут одновременно обращаться к Hashtable.

ответ дан JegsVala 05 июля '14 в 9:27
источник
3
голосов

HashMap эмулируется и поэтому может использоваться в GWT client code, тогда как Hashtable не является.

ответ дан pong 15 июля '13 в 12:54
источник
3
голосов

HashMaps дает вам свободу синхронизации и отладки намного проще

ответ дан user1506047 09 авг. '12 в 15:28
источник
  • 1
  • 2

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