Как между собой связаны Iterable, Iterator и «for-each»?
Классы, реализующие интерфейс
Классы, реализующие интерфейс
Iterable, могут применяться в конструкции for-each, которая использует Iterator.👍11
Узнаем самый средний элемент коллекции
В этом примере используется List
Пример вывода (для списка чисел [1, 2, 3, 4, 5, 6, 7, 8]):
Средние элементы: 4, 5
Среднее значение: 4.5
В этом примере используется List
numbers, который содержит числа. С помощью Collections.sort() список чисел сортируется в порядке возрастания. Затем вычисляется индекс середины списка. Если размер списка четный, то найдутся два средних элемента, их среднее значение вычисляется и выводится на экран. Если размер списка нечетный, то выводится только один средний элемент.Пример вывода (для списка чисел [1, 2, 3, 4, 5, 6, 7, 8]):
Средние элементы: 4, 5
Среднее значение: 4.5
👍13❤1
Что делает метод intern() в классе String?
Метод
Метод
intern() используется для сохранения строки в пуле строк или получения ссылки, если такая строка уже находится в пуле.👍11
Введение в Java Process Memory Model
Каждое Java приложение, после запуска, создаёт десятки, сотни, тысячи объектов в памяти компьютера на котором оно запущено.
Смотреть статью
Каждое Java приложение, после запуска, создаёт десятки, сотни, тысячи объектов в памяти компьютера на котором оно запущено.
Смотреть статью
Хабр
Введение в Java Process Memory Model
Каждое Java приложение, после запуска, создаёт десятки, сотни, тысячи объектов в памяти компьютера на котором оно запущено. Память, при этом, ресурс не бесконечный, и поэтому необходимо использовать...
👍11
WeakHashMap
WeakHashMap - это подкласс java.util.HashMap, который используется для хранения пар "ключ-значение". Основное отличие
Это позволяет использовать WeakHashMap для кэширования объектов, которые могут быть уничтожены сборщиком мусора в случае, если на них не осталось сильных ссылок. Это может подойти для объектов, созданных на основе потребительских запросов, которые не будут использоваться долгое время и не нужно хранить их в памяти постоянно.
В примере мы создаем объект и добавляем его в
WeakHashMap - это подкласс java.util.HashMap, который используется для хранения пар "ключ-значение". Основное отличие
WeakHashMap заключается в том, что он хранит ключи в виде "слабых ссылок" (weak reference), что означает их уничтожение при отсутствии сильной ссылки на объект.Это позволяет использовать WeakHashMap для кэширования объектов, которые могут быть уничтожены сборщиком мусора в случае, если на них не осталось сильных ссылок. Это может подойти для объектов, созданных на основе потребительских запросов, которые не будут использоваться долгое время и не нужно хранить их в памяти постоянно.
В примере мы создаем объект и добавляем его в
WeakHashMap. Затем мы обнуляем ссылку на этот объект и запускаем сборщик мусора. После этого мы пытаемся получить значение по ключу и должны получить null, так как ключ был удален из WeakHashMap.👍11❤1
Проверяем наличие дубликатов в массиве в Java
Мы можем работать лучше, используя Хеширование. Идея состоит в том, чтобы пройти по заданному массиву и вставить каждый встреченный элемент в HashSet. Теперь, если встреченный элемент уже присутствовал в наборе, он является дубликатом. Временная сложность этого решения O(n) но вспомогательное пространство используется O(n).
Мы знаем это HashSet не допускает дублирования значений в нем. Мы можем использовать это свойство для проверки дубликатов в массиве. Идея состоит в том, чтобы вставить все элементы массива в HashSet. Теперь массив содержит дубликат, если длина массива не равна размеру набора.
Другие способы проверить массив на дубликаты можно найти здесь.
Мы можем работать лучше, используя Хеширование. Идея состоит в том, чтобы пройти по заданному массиву и вставить каждый встреченный элемент в HashSet. Теперь, если встреченный элемент уже присутствовал в наборе, он является дубликатом. Временная сложность этого решения O(n) но вспомогательное пространство используется O(n).
Мы знаем это HashSet не допускает дублирования значений в нем. Мы можем использовать это свойство для проверки дубликатов в массиве. Идея состоит в том, чтобы вставить все элементы массива в HashSet. Теперь массив содержит дубликат, если длина массива не равна размеру набора.
Другие способы проверить массив на дубликаты можно найти здесь.
👍13❤1
Правила переопределения метода Object.equals().
1. Использование оператора
2. Использование оператор
3. Приведение аргумента к правильному типу. Поскольку эта операция следует за проверкой
4. Обход всех значимых полей класса и проверка того, что значение поля в текущем объекте и значение того же поля в проверяемом на эквивалентность аргументе соответствуют друг другу. Если проверки для всех полей прошли успешно, возвращается результат
По окончанию переопределения метода
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 остаётся в силе.
❓Что такое double checked locking Singleton?
double checked locking Singleton - это один из способов создания потокобезопасного класса реализующего шаблон Одиночка. Данный метод пытается оптимизировать производительность, блокируясь только случае, когда экземпляр одиночки создаётся впервые.
Следует заметить, что требование volatile обязательно. Проблема Double Checked Lock заключается в модели памяти Java, точнее в порядке создания объектов, когда возможна ситуация, при которой другой поток может получить и начать использовать (на основании условия, что указатель не нулевой) не полностью сконструированный объект. Хотя эта проблема была частично решена в JDK 1.5, однако рекомендация использовать volatile для Double Cheсked Lock остаётся в силе.
👍9
Преобразование массива в строку
Да да да, я знаю, что есть такие методы как Arrays.toString() и String.join() в Java. Но давайте все-таки рассмотрим еще один метод преобразования массива в строку
В этом примере мы используем Stream API, представленный в JDK 8. Arrays.strеam() принимает массив. Метод collect() возвращает результат после выполнения указанной операции над каждым элементом массива.
Здесь мы выполняем операцию Collectors.joining() над элементами массива, которая собирает элементы и объединяет их для возврата в виде целой строки.
Да да да, я знаю, что есть такие методы как 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
👍13❤2
Для чего используется PushbackInputStream?
Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс
У класса есть дополнительный метод
Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс
PushbackInputStream представляет механизм «заглянуть» во входной поток и увидеть, что оттуда поступит в следующий момент, не извлекая информации.У класса есть дополнительный метод
unread().👍10❤4
Пузырьковая сортировка
Данный алгоритм сортировки известен в первую очередь за счёт своей простоты, однако при этом он имеет одну из наиболее низких скоростей выполнения.
Пузырьковая сортировка весьма и весьма медленная, с временной сложностью O(N²), так как мы имеем вложенные циклы. Внешний проход по элементам выполняется за N раз, внутренний — тоже N раз, и в итоге мы получаем N*N, N² итераций.
Данный алгоритм сортировки известен в первую очередь за счёт своей простоты, однако при этом он имеет одну из наиболее низких скоростей выполнения.
Пузырьковая сортировка весьма и весьма медленная, с временной сложностью O(N²), так как мы имеем вложенные циклы. Внешний проход по элементам выполняется за N раз, внутренний — тоже N раз, и в итоге мы получаем N*N, N² итераций.
👍14❤1😱1
LinkedHashSet
LinkedHashSet представляет собой структуру данных, которая хранит элементы в порядке их добавления, а также не допускает дублирования элементов, как и HashSet.
Однако, в отличие от
Как видно из примера, элементы были добавлены в множество в порядке их добавления, а дубликат элемента "Java" не был добавлен в множество.
LinkedHashSet представляет собой структуру данных, которая хранит элементы в порядке их добавления, а также не допускает дублирования элементов, как и HashSet.
Однако, в отличие от
HashSet, LinkedHashSet сохраняет порядок добавления элементов, что может быть полезно в некоторых случаях.Как видно из примера, элементы были добавлены в множество в порядке их добавления, а дубликат элемента "Java" не был добавлен в множество.
👍11
Прожарка java.lang.String
Давайте абьюзить баг в java.lang.String, который позволит делать очень странные строки. Мы сделаем "Hello World", который не начинается с "Hello" и покажем, что не все пустые строки равны между собой. Научимся прожаривать строки в чужих классах.
Смотреть статью
Давайте абьюзить баг в java.lang.String, который позволит делать очень странные строки. Мы сделаем "Hello World", который не начинается с "Hello" и покажем, что не все пустые строки равны между собой. Научимся прожаривать строки в чужих классах.
Смотреть статью
👍4❤1
#Вопросы_с_собеседования
Что такое Java Virtual Machine (JVM)? Как она работает?
Java Virtual Machine (JVM) - это среда выполнения, которая позволяет выполнять Java-приложения на любой платформе, где установлена JVM. Она является ключевым компонентом технологии Java, так как обеспечивает портативность и независимость Java-кода от конкретной операционной системы.
JVM принимает скомпилированный Java-код (байт-код) и интерпретирует его в машинный код на конкретной платформе. Он выполняет множество задач, включая загрузку классов, управление памятью, выполнение потоков, оптимизацию кода и т. д.
Когда Java-приложение выполняется на JVM, оно получает доступ к богатому набору библиотек Java, которые предоставляют множество готовых классов и методов для решения различных задач. Благодаря JVM Java считается одним из самых надежных и масштабируемых языков программирования.
Что такое Java Virtual Machine (JVM)? Как она работает?
JVM принимает скомпилированный Java-код (байт-код) и интерпретирует его в машинный код на конкретной платформе. Он выполняет множество задач, включая загрузку классов, управление памятью, выполнение потоков, оптимизацию кода и т. д.
Когда Java-приложение выполняется на JVM, оно получает доступ к богатому набору библиотек Java, которые предоставляют множество готовых классов и методов для решения различных задач. Благодаря JVM Java считается одним из самых надежных и масштабируемых языков программирования.
👍21❤1