Разница между HashMap и Hashtable в Java?

Оба HashTable и HashMap реализуют интерфейс карты, но между ними существуют некоторые различия. Они есть:

  1. Безопасность потоков (синхронизировано)
  2. Нулевые ключи
  3. Наследование
  4. Производительность
  5. Траверс
  6. Сбой
  7. Сложность по времени
  8. Наследие

Безопасность потоков (синхронизировано)

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

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

Вы можете сделать HashMap потокобезопасным (синхронизированным), вызвав этот код

Null Keys

 

HashTable может содержать только ненулевой объект в качестве ключа или в качестве значения. Чтобы хранить и извлекать объекты из хеш-таблицы, объекты, используемые в качестве ключей, должны реализовывать метод hashCode и метод equals. Поскольку «null» не является объектом, вы не можете вызывать на нем .equals() или .hashCode(), поэтому Hashtable не может вычислить хэш, чтобы использовать его в качестве ключа.

Наследование

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

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

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

Traverse

HashMap проходит через Iterator, а Hashtable проходит через Enumerator и Iterator.

Безотказная

Итератор в HashMap является отказоустойчивым, а перечислитель для Hashtable - нет. Отказоустойчивость относится к контексту итераторов. Если итератор был создан в объекте коллекции, а какой-либо другой поток пытается изменить объект коллекции «структурно», будет выбрано исключение параллельной модификации.

Сложность времени

Hashtable использует целую цепочку (со связанными списками) в качестве стратегии обработки столкновений, ограничивающей время поиска O (n). Начиная с JAVA 8 HashMap использует Balanced Tree в качестве стратегии разрешения конфликтов, которая имеет ограниченное временное время O (log n).

Наследство

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

Внедрение HashMap

Выход

Как создать документ Excel программно

Реализация Hashtable

Выход

Источник: http://net-informations.com/Java/cJava/hashmap.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *