Java Learning
18.7K subscribers
1.62K photos
1 video
3 files
995 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
#Вопросы_с_собеседования

Как устроен HashMap?

HashMap состоит из «корзин» (bucket). С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары «ключ-значение», вычисляет хэш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется.
👍17
Программа по сравнению элементов массива и букв строки

Для сравнения элементов массива и букв строки в Java можно использовать следующую программу.

Программа создает массив из символов {'a', 'c', 'd', 'f', 'g'} и строку "abcdefg". В цикле происходит сравнение элементов массива и букв строки с помощью метода charAt(). Если элемент массива равен букве строки, то выводится сообщение об этом.

Затем массив сортируется по возрастанию методом sort() из класса Arrays. Отсортированный массив выводится на экран.
👍92
Получаем наиболее распространенный элемент в списке

Сделать это можно с помощью следующего фрагмента кода, подробнее о котором можно почитать здесь.
👍174
Как между собой связаны Iterable, Iterator и «for-each»?

Классы, реализующие интерфейс Iterable, могут применяться в конструкции for-each, которая использует Iterator.
👍11
Узнаем самый средний элемент коллекции

В этом примере используется List numbers, который содержит числа. С помощью Collections.sort() список чисел сортируется в порядке возрастания. Затем вычисляется индекс середины списка. Если размер списка четный, то найдутся два средних элемента, их среднее значение вычисляется и выводится на экран. Если размер списка нечетный, то выводится только один средний элемент.

Пример вывода (для списка чисел [1, 2, 3, 4, 5, 6, 7, 8]):
Средние элементы: 4, 5
Среднее значение: 4.5
👍131
Что делает метод intern() в классе String?

Метод intern() используется для сохранения строки в пуле строк или получения ссылки, если такая строка уже находится в пуле.
👍11
WeakHashMap

WeakHashMap - это подкласс java.util.HashMap, который используется для хранения пар "ключ-значение"
. Основное отличие WeakHashMap заключается в том, что он хранит ключи в виде "слабых ссылок" (weak reference), что означает их уничтожение при отсутствии сильной ссылки на объект.

Это позволяет использовать WeakHashMap для кэширования объектов, которые могут быть уничтожены сборщиком мусора в случае, если на них не осталось сильных ссылок. Это может подойти для объектов, созданных на основе потребительских запросов, которые не будут использоваться долгое время и не нужно хранить их в памяти постоянно.

В примере мы создаем объект и добавляем его в WeakHashMap. Затем мы обнуляем ссылку на этот объект и запускаем сборщик мусора. После этого мы пытаемся получить значение по ключу и должны получить null, так как ключ был удален из WeakHashMap.
👍111
Проверяем наличие дубликатов в массиве в Java

Мы можем работать лучше, используя Хеширование. Идея состоит в том, чтобы пройти по заданному массиву и вставить каждый встреченный элемент в HashSet. Теперь, если встреченный элемент уже присутствовал в наборе, он является дубликатом. Временная сложность этого решения O(n) но вспомогательное пространство используется O(n).

Мы знаем это HashSet не допускает дублирования значений в нем. Мы можем использовать это свойство для проверки дубликатов в массиве. Идея состоит в том, чтобы вставить все элементы массива в HashSet. Теперь массив содержит дубликат, если длина массива не равна размеру набора.

Другие способы проверить массив на дубликаты можно найти здесь.
👍131
Узнаем продолжительность аудио файла

Ответ на картинке.
👍23
Правила переопределения метода Object.equals().

1. Использование оператора == для проверки, является ли аргумент ссылкой на указанный объект. Если является, возвращается true. Если сравниваемый объект == null, должно вернуться false.
2. Использование оператор instanceof и вызова метода getClass() для проверки, имеет ли аргумент правильный тип. Если не имеет, возвращается false.
3. Приведение аргумента к правильному типу. Поскольку эта операция следует за проверкой instanceof она гарантированно будет выполнена.
4. Обход всех значимых полей класса и проверка того, что значение поля в текущем объекте и значение того же поля в проверяемом на эквивалентность аргументе соответствуют друг другу. Если проверки для всех полей прошли успешно, возвращается результат true, в противном случае - false.

По окончанию переопределения метода equals() следует проверить: является ли порождаемое отношение эквивалентности рефлексивным, симметричным, транзитивным и непротиворечивым? Если ответ отрицательный, метод подлежит соответствующей правке.
👍13😱3🔥1
#Вопросы_с_собеседования

Что такое double checked locking Singleton?

double checked locking Singleton - это один из способов создания потокобезопасного класса реализующего шаблон Одиночка. Данный метод пытается оптимизировать производительность, блокируясь только случае, когда экземпляр одиночки создаётся впервые.

Следует заметить, что требование volatile обязательно. Проблема Double Checked Lock заключается в модели памяти Java, точнее в порядке создания объектов, когда возможна ситуация, при которой другой поток может получить и начать использовать (на основании условия, что указатель не нулевой) не полностью сконструированный объект. Хотя эта проблема была частично решена в JDK 1.5, однако рекомендация использовать volatile для Double Cheсked Lock остаётся в силе.
👍9
Определить и найти. Разработка алгоритма поиска изменений с Мap-ами и хешами

Смотреть статью
👍4
Преобразование массива в строку

Да да да, я знаю, что есть такие методы как Arrays.toString() и String.join() в Java. Но давайте все-таки рассмотрим еще один метод преобразования массива в строку

В этом примере мы используем Stream API, представленный в JDK 8. Arrays.strеam() принимает массив. Метод collect() возвращает результат после выполнения указанной операции над каждым элементом массива.

Здесь мы выполняем операцию Collectors.joining() над элементами массива, которая собирает элементы и объединяет их для возврата в виде целой строки.
👍18
Получаем порядковый номер элемента в enum

Метод ordinal() используется с перечислениями (enum). Он возвращает порядковый номер константы перечисления, начиная с нуля.

В этом примере создается перечисление Colours с четырьмя константами: Red, Green, Brown и Yellow. В методе main создаются переменные для каждой из этих констант и выводятся их порядковые номера с помощью метода ordinal().
👍11
🔍 Поиск в глубину

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

Этот пример иллюстрирует обход в глубину для следующего графа:

0
/ \
1-----2
\
3
Начиная с вершины 2, алгоритм посетит вершины в следующем порядке: 2, 0, 1, 3.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132
Для чего используется PushbackInputStream?

Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс PushbackInputStream представляет механизм «заглянуть» во входной поток и увидеть, что оттуда поступит в следующий момент, не извлекая информации.

У класса есть дополнительный метод unread().
👍104
Пузырьковая сортировка

Данный алгоритм сортировки известен в первую очередь за счёт своей простоты, однако при этом он имеет одну из наиболее низких скоростей выполнения.

Пузырьковая сортировка весьма и весьма медленная, с временной сложностью O(N²), так как мы имеем вложенные циклы. Внешний проход по элементам выполняется за N раз, внутренний — тоже N раз, и в итоге мы получаем N*N, N² итераций.
👍141😱1
Простыми словами об InlineKeyboard в Телеграмм ботах на java

Смотреть статью
👍11