Что произойдет при попытке добавить null в качестве ключа в пустую TreeMap?
Anonymous Quiz
42%
В мапу добавится пара {null="value"}.
7%
Ничего не произойдет, мапа останется пустой.
42%
NullPointerException.
8%
Ошибка компиляции.
🔥4
🔍 Ответ на задачу про TreeMap: Любит ли она null-ключи? 🗺
Коллекции в Java по-разному относятся к null. Если HashMap его терпит, то что скажет TreeMap?
Объяснение:
Многие считают, что TreeMap категорически запрещает null-ключи. На самом деле, TreeMap — это просто дерево, которое полагается на механизм сравнения.
Проблема не в самой TreeMap, а в компараторе. Если вы используете дефолтный компаратор (Natural Ordering), он попытается вызвать
Однако, если при создании TreeMap передать ей кастомный компаратор, который умеет обрабатывать null (например,
Вывод:
TreeMap сама по себе НЕ запрещает null-ключи. Ошибка возникает только при использовании компаратора, не поддерживающего null (что происходит по умолчанию).
⚡️ Не перепутайте:
• HashMap: разрешает один null-ключ.
• Hashtable: запрещает null-ключи и значения на уровне методов
• TreeMap: позволяет использовать null-ключи, ЕСЛИ предоставлен соответствующий компаратор.
#java #collections #treemap #null #map #интервью #java_interview_tasks
Коллекции в Java по-разному относятся к null. Если HashMap его терпит, то что скажет TreeMap?
Объяснение:
Многие считают, что TreeMap категорически запрещает null-ключи. На самом деле, TreeMap — это просто дерево, которое полагается на механизм сравнения.
Проблема не в самой TreeMap, а в компараторе. Если вы используете дефолтный компаратор (Natural Ordering), он попытается вызвать
compareTo() у ключа. Вызов метода у null неизбежно приведет к NullPointerException.Однако, если при создании TreeMap передать ей кастомный компаратор, который умеет обрабатывать null (например,
Comparator.nullsFirst), то TreeMap будет прекрасно работать с null-ключами.Вывод:
TreeMap сама по себе НЕ запрещает null-ключи. Ошибка возникает только при использовании компаратора, не поддерживающего null (что происходит по умолчанию).
⚡️ Не перепутайте:
• HashMap: разрешает один null-ключ.
• Hashtable: запрещает null-ключи и значения на уровне методов
put/get.• TreeMap: позволяет использовать null-ключи, ЕСЛИ предоставлен соответствующий компаратор.
#java #collections #treemap #null #map #интервью #java_interview_tasks
🔥9👍3❤2
Что выведет данный код?
Anonymous Quiz
13%
true, true
11%
false, false
76%
true, false
0%
false, true
🔥3
Что выведет данный код?
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
Integer c = 1000;
Integer d = 1000;
System.out.println(c == d);
🔥3
🔍 Ответ на задачу про Integer: Когда 100 == 100, а 1000 != 1000? 🧐
Многие начинающие (и не только) джависты спотыкаются на сравнении объектов-оберток через
Объяснение:
В Java существует Integer Cache. При автоупаковке (autoboxing) вызывается метод
Для экономии памяти JVM кеширует объекты Integer в диапазоне от -128 до 127.
Поэтому
Для числа 1000 кеша нет, создаются два разных объекта в куче — и
Вывод:
Никогда не сравнивайте объекты-обертки через
⚡️ Не перепутайте:
- Для сравнения значений объектов всегда используйте
- Помните, что верхнюю границу кеша можно изменить через флаг
Хочешь больше таких нюансов? Ставь 🔥 и делись с коллегами!
#java #integer #cache #jvm #autoboxing #interview #java_interview_tasks
Многие начинающие (и не только) джависты спотыкаются на сравнении объектов-оберток через
==.Объяснение:
В Java существует Integer Cache. При автоупаковке (autoboxing) вызывается метод
Integer.valueOf(int).Для экономии памяти JVM кеширует объекты Integer в диапазоне от -128 до 127.
Поэтому
a и b ссылаются на один и тот же объект в кеше — и == возвращает true.Для числа 1000 кеша нет, создаются два разных объекта в куче — и
== (сравнение ссылок) возвращает false.Вывод:
Никогда не сравнивайте объекты-обертки через
==, если только вы не хотите проверить идентичность ссылок.⚡️ Не перепутайте:
- Для сравнения значений объектов всегда используйте
.equals().- Помните, что верхнюю границу кеша можно изменить через флаг
-XX:AutoBoxCacheMax=<size>.Хочешь больше таких нюансов? Ставь 🔥 и делись с коллегами!
#java #integer #cache #jvm #autoboxing #interview #java_interview_tasks
👍7🔥6❤1
Что выведет данный код?
Anonymous Quiz
15%
true, true
12%
false, false
66%
false, true
7%
true, false
👍4
Что выведет данный код?
String s1 = "Java";
String s2 = new String("Java");
String s3 = s2.intern();
System.out.println(s1 == s2);
System.out.println(s1 == s3);
👍4
🔍 Ответ на задачу про String Pool: Магия intern() или где живет ваша строка? 🧵
Сравнение строк в Java через
Объяснение:
-
-
- Метод
Вывод:
⚡️ Не перепутайте:
-
-
-
#java #string #stringpool #intern #jvm #interview #java_interview_tasks
Сравнение строк в Java через
== — это классика интервью. Но что произойдет, если мы начнем вручную управлять пулом строк?Объяснение:
-
s1 — это строковый литерал, он сразу попадает в String Pool.-
s2 создается через new String(), поэтому в куче (heap) создается новый объект, отличный от того, что в пуле. Сравнение s1 == s2 дает false.- Метод
intern() ищет строку в пуле. Если она там есть, он возвращает ссылку на объект из пула. Так как "Java" уже там была (от s1), s3 получит ту же самую ссылку.Вывод:
s1 == s3 вернет true, так как обе переменные теперь ссылаются на один и тот же объект в String Pool.⚡️ Не перепутайте:
-
== сравнивает ссылки.-
equals() сравнивает содержимое.-
intern() — полезный инструмент для экономии памяти, если у вас много повторяющихся строк, созданных динамически.#java #string #stringpool #intern #jvm #interview #java_interview_tasks
1👍6
В чем главное отличие CompletableFuture `join()` от `get()`?
Anonymous Quiz
5%
`join()` работает быстрее.
57%
`join()` не выбрасывает проверяемые (checked) исключения.
26%
`get()` нельзя использовать в лямбда-выражениях.
13%
`join()` автоматически перезапускает задачу при ошибке.
👍4❤1🔥1
🔍 Ответ на задачу про CompletableFuture: join() vs get() 🥊
Объяснение:
Оба метода ждут завершения задачи, но делают это по-разному.
Вывод:
Логика ожидания у них одинаковая, разница только в обработке ошибок.
#java #completablefuture #concurrency #exception #java8 #backend #интервью #java_interview_tasks
Объяснение:
Оба метода ждут завершения задачи, но делают это по-разному.
get() объявлен в интерфейсе Future и выбрасывает InterruptedException и ExecutionException (оба checked). Это заставляет вас писать try-catch. join() — это метод CompletableFuture, он выбрасывает CompletionException (runtime), что гораздо удобнее при использовании в Stream API и лямбдах.Вывод:
Логика ожидания у них одинаковая, разница только в обработке ошибок.
#java #completablefuture #concurrency #exception #java8 #backend #интервью #java_interview_tasks
🔥7
Понимание порядка инициализации полей и блоков — база для предсказания поведения сложных объектов.
В каком порядке выведутся цифры?
В каком порядке выведутся цифры?
class Parent {
static { System.out.print("1"); }
{ System.out.print("2"); }
Parent() { System.out.print("3"); }
}
class Child extends Parent {
static { System.out.print("4"); }
{ System.out.print("5"); }
Child() { System.out.print("6"); }
}
public class Main {
public static void main(String[] args) {
new Child();
}
}👻1