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

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

3465 голосов
/ 03 сентября 2008

Каковы различия между HashMap и Hashtable в Java?

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

Ответы [ 34 ]

13 голосов
/ 11 декабря 2013

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

  1. Карты позволяют итерировать и извлекать ключи, значения, а также обе пары ключ-значение, где HashTable не имеет всей этой возможности.
  2. В Hashtable есть функция содержит (), что очень сложно использовать. Потому что смысл содержит немного отклоняется. Значит ли это содержит ключ или содержит значение? трудно понять. То же самое в Картах у нас есть функции ContainsKey () и ContainsValue (), которые очень легко понять.
  3. В hashmap вы можете безопасно удалять элементы во время итерации. где это невозможно в хеш-таблицах.
  4. HashTables по умолчанию синхронизированы, поэтому их можно легко использовать с несколькими потоками. Где, поскольку HashMaps не синхронизируются по умолчанию, поэтому может использоваться только с одним потоком. Но вы все равно можете преобразовать HashMap в синхронизированный с помощью функции synchronizedMap (Map m) класса Collections util.
  5. HashTable не допускает нулевые ключи или нулевые значения. Где, поскольку HashMap допускает один нулевой ключ и несколько нулевых значений.
12 голосов
/ 19 марта 2014

Мой маленький вклад:

  1. Первое и наиболее существенное отличие между Hashtable и HashMap заключается в том, что HashMap не является поточно-ориентированным, а Hashtable является потокобезопасным набором.

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

  3. Третье отличие Hashtable от HashMap состоит в том, что Hashtable является устаревшим классом, и вам следует использовать ConcurrentHashMap вместо Hashtable в Java.

9 голосов
/ 15 апреля 2013

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

8 голосов
/ 05 июля 2014

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 одновременно.

8 голосов
/ 31 января 2013

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

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

8 голосов
/ 22 января 2013

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

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

7 голосов
/ 10 февраля 2015

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));

    }
}
4 голосов
/ 15 июля 2013

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

4 голосов
/ 05 января 2016

Синхронизация или потокобезопасность :

Хэш-карта не синхронизирована, следовательно, она не является безопасной и не может совместно использоваться несколькими потоками без надлежащего синхронизированного блока, тогда как Hashtable синхронизируется и, следовательно, является потокобезопасной.

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

HashMap допускает один нулевой ключ и любое количество нулевых значений. Hashtable не допускает нулевые ключи или значения.

Итерация значений :

Итератор в HashMap - это отказоустойчивый итератор, а перечислитель для Hashtable - нет, и он создает исключение ConcurrentModificationException, если какой-либо другой поток изменяет карту структурно, добавляя или удаляя любой элемент, кроме собственного метода Iterator ().

Суперкласс и Legacy :

HashMap является подклассом класса AbstractMap, тогда как Hashtable является подклассом класса Dictionary.

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

Поскольку HashMap не синхронизируется, он быстрее по сравнению с Hashtable.

См. http://modernpathshala.com/Article/1020/difference-between-hashmap-and-hashtable-in-java для примеров и вопросов интервью и викторины, связанных с коллекцией Java

4 голосов
/ 09 августа 2012

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

...