Telegram Web
Какое из этих слов не является ключевым в Java?
Anonymous Quiz
6%
static
12%
try
63%
String
9%
new
10%
Узнать ответ
Какие логические операции и операторы вы знаете?

• & : Логическое AND (И);
• && : Сокращённое AND;
• | : Логическое OR (ИЛИ);
• || : Сокращённое OR;
• ^ : Логическое XOR (исключающее OR (ИЛИ));
• ! : Логическое унарное NOT (НЕ);
• &= : AND с присваиванием;
• |= : OR с присваиванием;
• ^= : XOR с присваиванием;
• == : Равно;
• != : Не равно;
• ?: : Тернарный (троичный) условный оператор.

#вопросы_с_собеседований
Сортировка списка и костыль в JDK

Вести абстрактные разговоры о разработке легко и приятно. Можно два часа рассуждать, что такое хорошее API, но гораздо полезнее обсудить конкретные примеры. Сегодня разберём метод сортировки.

Если показать вопрос перед постом питонисту, он однозначно выберет list.sort(). Хотя бы потому что в питоне есть такой метод.

Класс Integer реализует интерфейс Comparable, сортировка чисел — базовая функциональность любого языка программирования. Так что метод sort() максимально логичен.

Однако в интерфейсе List нет такого метода, только
void sort(Comparator<? super E> c) {…}

Для элементарной операции сортировки чисел приходится писать
list.sort(Comparator.naturalOrder())

Код с Comparator.naturalOrder() похож на какой-то костыль. Под капотом не происходит ничего особенного, реализация компаратора очень простая:
(с1, с2) -> c1.compareTo(c2)

Так зачем писать так сложно? Почему в интерфейсе List нет метода sort()?

Сейчас расскажу:)

Java создавался как язык для больших и долгоживущих приложений, и его основные ценности — стабильность и обратная совместимость.

C начала 2000-х в JDK есть метод Collections.sort(List). Статический метод, который меняет внутреннее состояние аргумента. Сейчас это порицается, но в те времена было норм.

В больших компаниях классы JDK часто расширяли удобными методами, в том числе сортировкой в функциональном стиле:
CustomList sorted = list.sort();

Спустя много лет стало понятно, что экземплярные методы сортировки — это классно, и надо добавить такой метод в JDK. Чтобы текущие реализации списков не сломались, это должен быть дефолтный метод в интерфейсе List.

Но есть проблема. Допустим, на проекте есть такой класс:
public class CustomList implements List {
public CustomList sort() {…}
}

Допустим, в java 8 в интерфейс List добавили метод
default void sort() {…}

Старый метод не может переопределить дефолтный. тк возвращаемые значения не совместимы. Поэтому проекты, которые определили свой функциональный sort в начале 2000-х, перестанут компилироваться. Пользователи будут недовольны.

Многие проекты полагаются на свой sort, поэтому разработчики JDK не стали добавлять его в интерфейс. Метод sort(Comparator) использовался редко, поэтому теперь он с нами.

У Stream API нет проблем с совместимостью, так что для стримов есть прекрасный метод sorted(). Для коллекций метод sorted() есть в Kotlin💖
(обратите внимание на суффикс -ed, всё по правилам функционального подхода)

Ответ на вопрос перед постом: отсортировать список можно так:
list.sort(Comparator.naturalOrder());
list = list.stream().sorted().toList();

Если вам понравился list.sort(), значит у вас хороший вкус на API. К сожалению, у java свои загоны, поэтому этого метода в JDK нет.
👍62
Какая строка первой вызовет ошибку компиляции?
Anonymous Quiz
33%
l1
9%
l2
9%
l3
17%
l4
32%
Узнать ответ
Уютное сообщество джавистов
Photo
Ошибка, не прислали само условие. 7% правильно ответило) 41% почти)
🤣3
Сколько переходов происходит в момент вызова HashMap.get(key) по ключу, который есть в таблице?

• ключ равен null: 1 - выполняется единственный метод getForNullKey().

• любой ключ отличный от null: 4 - вычисление хэш-кода ключа; определение номера корзины; поиск значения; возврат значения.

#вопросы_с_собеседований
👍3
Какой из этих конструкторов используется для создания пустого объекта String?
Anonymous Quiz
63%
String()
4%
String(void)
3%
String(0)
30%
Ни один из перечисленных
Метод Character.toString()

Метод Character.toString() используется для преобразования символа (char) в строку (String).

Метод принадлежит классу Character и полезен, когда нужно конвертировать символ в строку для вывода или конкатенации.
👍2
Имеет ли смысл объявлять метод private final?

Объявление метода с модификаторами private и final имеет смысл, когда вы хотите:

— Скрыть детали реализации метода от других классов.
— Зафиксировать определенное поведение метода и не дать его переопределить.
— Сделать метод доступным только для использования внутри данного класса.

#вопросы_с_собеседований
👎14👍2
Что произойдет при вызове Iterator.next() без предварительного вызова Iterator.hasNext()?

Если итератор указывает на последний элемент коллекции, то возникнет исключение NoSuchElementException, иначе будет возвращен следующий элемент.

#вопросы_с_собеседований
Какое значение будет сохранено в строку s? String s = "value = " + 2 + 2;
Anonymous Quiz
9%
"value = 2 + 2"
43%
"value = 22"
19%
Compiler Error
23%
"value = 4"
7%
"value = 2 2"
В чем разница между Iterator и Enumeration?

— Iterator появился в JDK 1.2 и реализует интерфейс Iterable, в то время как Enumeration существовал в более ранних версиях JDK и не реализует Iterable.

— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.

— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.

— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.

#вопросы_с_собеседований
👍5
Что будет выведено на экран в результате выполнения следующего кода: public class SomeClass { static int x = 5; public static void main(String[] args) { int x; int y = 5; if (y > 3) x = 1; System.out.println(x); } }
Anonymous Quiz
28%
Compiler error
51%
1
3%
3
9%
Error warning
9%
5
Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?

При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак.

Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().

#вопросы_с_собеседований
Как и когда происходит увеличение количества корзин в HashMap?

Помимо capacity у HashMap есть еще поле loadFactor, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor. По умолчанию loadFactor = 0.75. По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.

#вопросы_с_собеседований
👍5👎1
2025/07/08 17:59:15
Back to Top
HTML Embed Code: