В чем разница между HashMap и Hashtable
Источник: 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?
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
Появления 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); } }
По возможности используйте примитивы, а не объекты, поскольку они не могут иметь пустых ссылок. Например, используйте int вместо Integer и boolean вместо Boolean.
Убедитесь, что вы дважды проверили свой код. Так вы снизите вероятность появления NullPointerException.