Hashtable или hashmap java

HashMap против Hashtable | Java

В этом посте будет обсуждаться основное различие между HashMap и Hashtable в Java.

Мы знаем, что Map — это объект, который сопоставляет ключи со значениями. Оба HashMap а также Hashtable являются основанными на хеше реализациями java.util.Map интерфейс. В этом посте мы обсудим некоторые из основных различий между ними:

1. HashMap реализация не синхронизирована. Он не является потокобезопасным, поэтому несколько потоков не должны обращаться к HashMap одновременно без надлежащего кода синхронизации. HashMap можно синхронизировать извне разными способами:

    Оберните хэш-карту, используя Collections.synchronizedMap метод во время создания карты,

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

С другой стороны, Hashtable реализация синхронизируется и распределяется между несколькими потоками без какого-либо явного кода синхронизации.

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

2. Еще одно заметное различие между HashMap а также Hashtable в том, что Hashtable не допускает пустых ключей или значений, тогда как HashMap допускает один нулевой ключ и любое количество нулевых значений. А NullPointerException будет сгенерировано, если мы попытаемся вставить null в качестве ключа или значения в Hashtable , как показано ниже:

Читайте также:  Html form inside other form

результат:

Null Value: NullPointerException thrown
Null Key: NullPointerException thrown

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

4. Итератор, возвращаемый HashMap а также Hashtable класс отказоустойчивый. Это означает ConcurrentModificationException будет выброшено, если карта структурно изменена после создания итератора без использования итератора remove() метод.

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

5. HashMap наследует java.util.AbstractMap класс тогда как Hashtable наследует java.util.Dictionary учебный класс.

Это все о различиях между HashMap и Hashtable в Java.

Средний рейтинг 5 /5. Подсчет голосов: 9

Голосов пока нет! Будьте первым, кто оценит этот пост.

Сожалеем, что этот пост не оказался для вас полезным!

Расскажите, как мы можем улучшить этот пост?

Источник

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

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

2. Hashtable и HashMap в Java

Hashtable и HashMap очень похожи — обе коллекции реализуют интерфейс Map .

Кроме того, методы put() , get() , remove() и containsKey() обеспечивают производительность O(1) с постоянным временем. Внутри эти методы работают на основе общей концепции хеширования с использованием сегментов для хранения данных.

Ни один из классов не поддерживает порядок вставки элементов. Другими словами, первый добавленный элемент может не быть первым элементом, когда мы перебираем значения.

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

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

3.1. Синхронизация

Во- первых, Hashtable является потокобезопасным и может совместно использоваться несколькими потоками в приложении.

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

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

3.2. Нулевые значения

Другим отличием является нулевая обработка. HashMap позволяет добавить одну запись с нулем в качестве ключа, а также множество записей с нулем в качестве значения. Напротив, Hashtable вообще не допускает null . Давайте посмотрим на пример null и HashMap :

 HashMapString, String> map = new HashMapString, String>();  map.put(null, "value");  map.put("key1", null);  map.put("key2", null); 

Источник

Кофе-брейк #173. В чем разница между HashMap и Hashtable. Как найти и исправить исключение NullPointerException в Java

Java-университет

Кофе-брейк #173. В чем разница между HashMap и Hashtable. Как найти и исправить исключение NullPointerException в Java - 1

Источник: Medium Сегодня вы узнаете ответ на один из самых популярных вопросов на собеседованиях по Java: какая разница между HashMap и Hashtable. Hashtable — это структура данных для хранения пар ключей и их значений, основанная на хешировании и реализации интерфейса Map. HashMap также является структурой данных для хранения ключей и значений, основанной на хешировании и реализации интерфейса Map. HashMap позволяет быстро получить значение по ключу. Например, имя пользователя и номер его телефона. Между HashMap и Hashtable в Java есть существенные различия . К ним относятся безопасность потоков, синхронизация и согласованность реализации Map. Важно учитывать эти аспекты при выборе типа структуры данных для использования в вашей Java-программе: HashMap — это несинхронизированная неупорядоченная карта пар ключ-значение (key-value). Она допускает пустые значения и использует хэш-код в качестве проверки на равенство, в то время как Hashtable представляет собой синхронизированную упорядоченную карту пар ключ-значение. Она не допускает пустых значений и использует метод equals() для проверки на равенство. HashMap по умолчанию имеет емкость 16, а начальная емкость Hashtable по умолчанию — 11. Значения объекта HashMap перебираются с помощью итератора, а Hashtable — это единственный класс, кроме вектора, который использует перечислитель (enumerator) для перебора значений объекта Hashtable. Помните, что различия между HashMap и Hashtable — один из самых популярных вопросов на собеседованиях по Java.

Как найти и исправить исключение NullPointerException в Java

Кофе-брейк #173. В чем разница между HashMap и Hashtable. Как найти и исправить исключение NullPointerException в Java - 2

Источник: Theflashreads Прочитав эту статью, вы сумеете лучше разбираться в поиске и исправлении распространенной ошибки в Java-коде — исключении NullPointerException.

Что такое исключение NullPointerException?

java.lang.NullPointerException является исключением времени выполнения в Java. Оно возникает, когда происходит попытка доступа к переменной, которая не указывает ни на какой объект и ни на что не ссылается, то есть она равна нулю. Поскольку NullPointerException это исключение времени выполнения, его не нужно перехватывать и обрабатывать явно в коде приложения.

При каких обстоятельствах возникает NullPointerException?

  • Доступ к свойствам нулевого объекта.
  • Выбрасывание null из метода, который выдает исключение.
  • Неправильная конфигурация для инфраструктур внедрения зависимостей, например: (Spring).
  • Передача нулевых параметров в метод.
  • Вызов методов для нулевого объекта.
  • Использование synchronized для нулевого объекта.
  • Доступ к элементу index (например, в массиве) нулевого объекта.

Пример исключения NullPointerException

В этом примере мы пытаемся вызвать метод printLength , который принимает строку в качестве параметра и печатает ее длину. Если значение строки, которое передается в качестве параметра, равно нулю, то появится исключение java.lang.NullPointerException .

 public class NullPointerExceptionExample < private static void printLength(String str) < System.out.println(str.length()); >public static void main(String args[]) < String nullString = null; printLength(nullString); >> Exception in thread "main" java.lang.NullPointerException at NullPointerExceptionExample.printLength(NullPointerExceptionExample.java:3) at NullPointerExceptionExample.main(NullPointerExceptionExample.java:8) 

Как избежать возникновения NullPointerException

  • Убедитесь, что объект правильно инициализирован, добавив проверку null перед обращением к его методам или свойствам.
  • Используйте Apache Commons StringUtils для операций со строками: например, StringUtils.isNotEmpty() для проверки того, пуста ли строка перед ее дальнейшим использованием.
 import org.apache.commons.lang3.StringUtils; public class NullPointerExceptionExample < private static void printLength(String str) < if (StringUtils.isNotEmpty(str)) < System.out.println(str.length()); >else < System.out.println("This time there is no NullPointerException"); >> public static void main(String args[]) < String nullString = null; printLength(nullString); >> 

Источник

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

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

В этой статье мы рассмотрим интересный вопрос из раздела Коллекции в Java, а именно «В чем разница между классами Hashtable и HashMap?».

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

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

Кратко о HashMap

HashMap реализует интерфейс Map, который подразумевает хранение данных в виде пар ключ-значение. HashMap не является синхронизированным и потокобезопасным. Также HashMap допускает хранение null ключей и значений, но недопускает дублей ключей. Следует помнить, что для null-ключа hashCode() всегда равен нулю.

Маленький пример использования HashMap:

Источник

Оцените статью