🔍 Ответ на задачу про перегрузку методов: null и неоднозначность ⚖️
Java при перегрузке (overloading) всегда выбирает наиболее специфичный (most specific) тип. Так как
Вывод:
Напечатается "String". Если бы мы добавили еще метод
⚡️ Не перепутайте:
Если нужно вызвать именно версию для
#java #overloading #basics #polymorphism #интервью #java_interview_tasks
Java при перегрузке (overloading) всегда выбирает наиболее специфичный (most specific) тип. Так как
String является наследником Object, он считается более специфичным. Компилятор отдаст предпочтение ему.Вывод:
Напечатается "String". Если бы мы добавили еще метод
print(Integer i), возникла бы ошибка компиляции, так как String и Integer не связаны иерархией, и Java не смогла бы выбрать.⚡️ Не перепутайте:
Если нужно вызвать именно версию для
Object, сделайте явное приведение: print((Object) null).#java #overloading #basics #polymorphism #интервью #java_interview_tasks
❤4👍2👀2
Что произойдет, если при формировании Map попадутся два одинаковых ключа?
Anonymous Quiz
8%
В мапе останется первый элемент ("apple").
61%
В мапе останется последний элемент ("apricot").
28%
IllegalStateException.
3%
Ошибка компиляции.
👍3❤1👀1
Что произойдет, если при формировании Map попадутся два одинаковых ключа?
List<String> list = Arrays.asList("apple12", "banana", "apricot");
Map<Integer, String> map = list.stream()
.collect(Collectors.toMap(s -> s.length(), s -> s));🔥5💩2👀1
🔍 Ответ на задачу про Collectors.toMap 💥
Дефолтная версия
Вывод:
Чтобы код не падал, нужно использовать перегруженную версию с "merge function":
⚡️ Не перепутайте:
Всегда думайте, возможны ли дубликаты в ваших данных перед использованием
#java #streamapi #collectors #map #exception #интервью #java_interview_tasks
Дефолтная версия
Collectors.toMap(keyMapper, valueMapper) предполагает, что ключи уникальны. Если встречается дубликат (и "apple12", и "apricot" имеют длину 7), метод выбрасывает IllegalStateException: Duplicate key.Вывод:
Чтобы код не падал, нужно использовать перегруженную версию с "merge function":
.collect(Collectors.toMap(s -> s.length(), s -> s, (oldValue, newValue) -> oldValue)) — это скажет стриму оставить старое значение при конфликте.⚡️ Не перепутайте:
Всегда думайте, возможны ли дубликаты в ваших данных перед использованием
toMap().#java #streamapi #collectors #map #exception #интервью #java_interview_tasks
👍9🤡3❤2
В чём разница между
Что выведет этот код?
replace() и replaceAll(), если оба принимают две строки?Что выведет этот код?
String str = "java.is.fun";
System.out.println(str.replace(".", "/"));
System.out.println(str.replaceAll(".", "/"));
🔥4
🔍 Ответ на задачу про String: replace vs replaceAll 🧐
-
-
Вывод:
Первая строка выведет
⚡️ Не перепутайте:
Если вам не нужны регулярные выражения, всегда используйте
#java #string #regex #basics #интервью #java_interview_tasks
-
replace(CharSequence target, CharSequence replacement) заменяет литеральные строки. Точка воспринимается просто как символ.-
replaceAll(String regex, String replacement) принимает регулярное выражение. В регулярках точка . означает "любой символ". Поэтому replaceAll заменит абсолютно все символы в строке на слэш.Вывод:
Первая строка выведет
java/is/fun, а вторая — ///////////.⚡️ Не перепутайте:
Если вам не нужны регулярные выражения, всегда используйте
replace(). Он быстрее и безопаснее.#java #string #regex #basics #интервью #java_interview_tasks
👍10🔥6❤1
Что останется в списке после удаления?
Anonymous Quiz
21%
[2, 3]
69%
[1, 3]
3%
[1, 2]
8%
IndexOutOfBoundsException
❤1👍1🔥1
Что останется в списке после удаления?
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
list.remove(1);
System.out.println(list);
👏5🥱3🔥2❤1
🔍 Ответ на задачу про List.remove(): Индекс или Объект? 🔢
Удаление из списка
У
Вывод:
Список станет
⚡️ Не перепутайте:
Будьте осторожны с коллекциями чисел! Всегда проверяйте, удаляете вы по индексу или по значению.
#java #collections #arraylist #list #интервью #java_interview_tasks
Удаление из списка
List<Integer> — классическая ловушка из-за перегрузки метода remove().У
List есть два метода: remove(int index) и remove(Object o). Если в списке лежат Integer, то при вызове remove(1) Java выберет версию с примитивом int (по индексу), так как это точное совпадение. В итоге удалится элемент под индексом 1 (это число 2).Вывод:
Список станет
[1, 3]. Чтобы удалить именно число 1, нужно вызвать list.remove(Integer.valueOf(1)).⚡️ Не перепутайте:
Будьте осторожны с коллекциями чисел! Всегда проверяйте, удаляете вы по индексу или по значению.
#java #collections #arraylist #list #интервью #java_interview_tasks
1👍8❤2🔥1
🔥2❤1👍1
При работе с финансами мы используем
Что выведет код?
BigDecimal. Но как их правильно сравнивать?Что выведет код?
BigDecimal d1 = new BigDecimal("1.0");
BigDecimal d2 = new BigDecimal("1.00");
System.out.println(d1.equals(d2));
System.out.println(d1.compareTo(d2) == 0);❤4👍1🔥1
🔍 Ответ на задачу про BigDecimal: equals vs compareTo ⚖️
-
-
Вывод:
⚡️ Не перепутайте:
Для проверки равенства денежных сумм почти всегда нужно использовать
#java #bigdecimal #math #finance #интервью #java_interview_tasks
-
equals() у BigDecimal сравнивает не только значение, но и scale (точность/количество знаков после запятой). Так как у "1.0" scale=1, а у "1.00" scale=2, они не равны.-
compareTo() сравнивает только математические значения. 1.0 и 1.00 математически равны.Вывод:
equals вернет false, а compareTo вернет true.⚡️ Не перепутайте:
Для проверки равенства денежных сумм почти всегда нужно использовать
compareTo() == 0.#java #bigdecimal #math #finance #интервью #java_interview_tasks
👍6🔥3👏1
🔥3
Что выведет код?
String MULTIPLE_VALUES_SPLITTER = "\\|";
String val = "apple|orange|banana";
System.out.println(val.contains(MULTIPLE_VALUES_SPLITTER));
❤3👍2🔥1
🔍 Ответ на задачу про String.contains: Ловушка экранирования 🪤
Часто при переходе от регулярных выражений к обычным строковым методам в Java возникает путаница с экранированием.
Многие методы в Java (например,
Однако метод
В данном примере:
-
- Метод
- В строке
Вывод:
Результат будет
⚡️ Не перепутайте:
- Методы
- Методы
#java #string #contains #regex #backslash #интервью #java_interview_tasks
Часто при переходе от регулярных выражений к обычным строковым методам в Java возникает путаница с экранированием.
Многие методы в Java (например,
split, replaceAll) принимают регулярные выражения. В regex символ | (pipe) является специальным (логическое ИЛИ) и требует экранирования — \|.Однако метод
String.contains(CharSequence s) ищет буквальное совпадение подстроки.В данном примере:
-
MULTIPLE_VALUES_SPLITTER инициализируется строкой \| (обратный слеш и вертикальная черта).- Метод
contains честно ищет эти два символа подряд.- В строке
"apple|orange|banana" есть только символ |, но нет символа \.Вывод:
Результат будет
false. Для корректной проверки наличия разделителя в данном случае нужно использовать val.contains("|").⚡️ Не перепутайте:
- Методы
contains, indexOf, replace работают с литералами.- Методы
split, replaceAll, matches работают с регулярными выражениями.#java #string #contains #regex #backslash #интервью #java_interview_tasks
👍8❤1🔥1
Что выведет этот код?
Anonymous Quiz
20%
true, true
35%
false, false
14%
true, false
32%
false, true
👍3🔥1👏1
Как сравнить два
Что выведет этот код?
NaN (Not-a-Number) в Java?!Что выведет этот код?
double x = Double.NaN;
double y = Double.NaN;
System.out.println(x == y);
System.out.println(Double.valueOf(x).equals(Double.valueOf(y)));
👍5🔥1👏1
🔍 Ответ на задачу про Double.NaN: 👻
- Согласно стандарту IEEE 754,
- Однако
Вывод:
Сравнение примитивов даст
⚡️ Не перепутайте:
Для проверки на
#java #double #nan #floatingpoint #интервью #java_interview_tasks
- Согласно стандарту IEEE 754,
NaN не равен самому себе. Поэтому x == y всегда false.- Однако
Double.equals() реализован так, что он считает два NaN равными. Это сделано для того, чтобы NaN можно было использовать в коллекциях (например, как ключ в HashMap).Вывод:
Сравнение примитивов даст
false, а объектов — true.⚡️ Не перепутайте:
Для проверки на
NaN у примитивов используйте Double.isNaN(x).#java #double #nan #floatingpoint #интервью #java_interview_tasks
👍7🔥1
Что будет, если изменить объект, который уже лежит в `HashSet`?
Сколько элементов будет в сете в конце?
Сколько элементов будет в сете в конце?
Anonymous Quiz
32%
true, 1
58%
false, 1
3%
false, 0
7%
true, 2
👍3🔥1