- HashMap против Hashtable | Java
- Различия между HashMap и Hashtable
- 2. Hashtable и HashMap в Java
- 3. Различия между Hashtable и HashMap
- 3.1. Синхронизация
- 3.2. Нулевые значения
- Кофе-брейк #173. В чем разница между HashMap и Hashtable. Как найти и исправить исключение NullPointerException в Java
- Как найти и исправить исключение NullPointerException в Java
- Что такое исключение NullPointerException?
- При каких обстоятельствах возникает NullPointerException?
- Пример исключения NullPointerException
- Как избежать возникновения NullPointerException
- Разница между Hashtable и HashMap в Java
- Разница между Hashtable и HashMap в Java
- Кратко о HashMap
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 , как показано ниже:
результат:
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
Источник: 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
Источник: 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
В этой статье мы рассмотрим интересный вопрос из раздела Коллекции в Java, а именно «В чем разница между классами Hashtable и HashMap?».
Разница между Hashtable и HashMap в Java
В ходе работы с каждым из классов было обнаружено значительное отличие в производительности на достаточно больших объемах данных. Познакомившись подробнее с документацией и особенностями работы каждой коллекции, решил написать эту статью — небольшую выжимку полученной информации для возможности быстро освежить знания в будущем. Коллекция Hashtable хоть и «древняя», но до сих пор используется на старых проектах. К тому же, практика показывает, что этот вопрос часто задают на собеседованиях.
Кратко о HashMap
HashMap реализует интерфейс Map, который подразумевает хранение данных в виде пар ключ-значение. HashMap не является синхронизированным и потокобезопасным. Также HashMap допускает хранение null ключей и значений, но недопускает дублей ключей. Следует помнить, что для null-ключа hashCode() всегда равен нулю.
Маленький пример использования HashMap: