Варианты ответа:
Anonymous Quiz
0%
one two one three two
78%
one two three
11%
three two one
11%
two one three
Что выведет код?
#Tasks
import java.util.concurrent.CopyOnWriteArraySet;
public class Main {
public static void main(String[] args) {
CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<>();
set.add("one");
set.add("two");
set.add("one");
set.add("three");
set.add("two");
for (String s : set) {
System.out.print(s + " ");
}
}
}
#Tasks
Встреча создана. Для тех кто хочет просто поболтать для начала, можете присоединяться по ссылке:
https://telemost.yandex.ru/j/58955919303557
Сегодня мы попробуем решить ряд алгоритмических задач и не сойти с ума при этом🤪
https://telemost.yandex.ru/j/58955919303557
Сегодня мы попробуем решить ряд алгоритмических задач и не сойти с ума при этом🤪
telemost.yandex.ru
Яндекс Телемост
Видеовстречи по ссылке. Собирайте в Телемосте рабочие конференции или встречайтесь с друзьями. Встречи не ограничены по времени. Можно скачать Телемост для Windows или macOS.
😁1
Основные методы CopyOnWriteArraySet и примеры использования
add(E e):
Добавляет элемент в множество, если он отсутствует. Возвращает true, если элемент был добавлен, и false, если элемент уже присутствует в множестве.
remove(Object o):
Удаляет указанный элемент из множества. Возвращает true, если элемент был удален, и false, если элемента не было в множестве.
contains(Object o):
Проверяет, содержится ли указанный элемент в множестве. Возвращает true, если элемент присутствует, и false, если отсутствует.
size():
Возвращает количество элементов в множестве.
isEmpty():
Проверяет, пусто ли множество. Возвращает true, если множество пусто, и false, если нет.
clear():
Удаляет все элементы из множества, оставляя его пустым.
iterator():
Возвращает итератор для обхода элементов в множестве. Итератор безопасен для многопоточного использования, однако не гарантирует отражение изменений, сделанных другими потоками после создания итератора.
toArray():
Преобразует множество в массив. Возвращает массив, содержащий все элементы множества.
equals(Object o):
Проверяет, равен ли текущий набор указанному объекту. Два множества считаются равными, если они содержат одинаковые элементы.
Примеры использования CopyOnWriteArraySet
Хранение активных сессий пользователя:
В веб-приложениях можно использовать CopyOnWriteArraySet для хранения активных сессий пользователя, так как чтение информации о сессиях происходит чаще, чем их добавление или удаление.
Подписчики на события:
В системах, использующих паттерн "наблюдатель" (Observer), CopyOnWriteArraySet может использоваться для хранения подписчиков на события.
Многопоточная работа с уникальными значениями:
CopyOnWriteArraySet идеально подходит для работы с множествами данных в многопоточной среде, где важна уникальность значений. Например, при разработке кеша для хранения уникальных запросов.
#Java #Training #Medium #CopyOnWriteArraySet
add(E e):
Добавляет элемент в множество, если он отсутствует. Возвращает true, если элемент был добавлен, и false, если элемент уже присутствует в множестве.
CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<>();
set.add("Java");
set.add("Concurrency");
boolean added = set.add("Java"); // Вернет false, так как "Java" уже есть в множестве
remove(Object o):
Удаляет указанный элемент из множества. Возвращает true, если элемент был удален, и false, если элемента не было в множестве.
boolean removed = set.remove("Java"); // Вернет true, если "Java" была удалена
contains(Object o):
Проверяет, содержится ли указанный элемент в множестве. Возвращает true, если элемент присутствует, и false, если отсутствует.
boolean contains = set.contains("Concurrency"); // Вернет true, если "Concurrency" есть в множестве
size():
Возвращает количество элементов в множестве.
int size = set.size(); // Возвращает количество элементов в множестве
isEmpty():
Проверяет, пусто ли множество. Возвращает true, если множество пусто, и false, если нет.
boolean isEmpty = set.isEmpty(); // Вернет true, если множество пусто
clear():
Удаляет все элементы из множества, оставляя его пустым.
set.clear(); // Очищает множество
iterator():
Возвращает итератор для обхода элементов в множестве. Итератор безопасен для многопоточного использования, однако не гарантирует отражение изменений, сделанных другими потоками после создания итератора.
for (String element : set) {
System.out.println(element);
}
toArray():
Преобразует множество в массив. Возвращает массив, содержащий все элементы множества.
Object[] array = set.toArray();
equals(Object o):
Проверяет, равен ли текущий набор указанному объекту. Два множества считаются равными, если они содержат одинаковые элементы.
CopyOnWriteArraySet<String> anotherSet = new CopyOnWriteArraySet<>();
boolean isEqual = set.equals(anotherSet); // Сравнивает два множества
Примеры использования CopyOnWriteArraySet
Хранение активных сессий пользователя:
В веб-приложениях можно использовать CopyOnWriteArraySet для хранения активных сессий пользователя, так как чтение информации о сессиях происходит чаще, чем их добавление или удаление.
CopyOnWriteArraySet<Session> activeSessions = new CopyOnWriteArraySet<>();
// Добавление новой сессии
activeSessions.add(newSession);
// Проверка наличия активной сессии
if (activeSessions.contains(currentSession)) {
// Обработка активной сессии
}
// Удаление завершенной сессии
activeSessions.remove(expiredSession);
Подписчики на события:
В системах, использующих паттерн "наблюдатель" (Observer), CopyOnWriteArraySet может использоваться для хранения подписчиков на события.
CopyOnWriteArraySet<EventListener> listeners = new CopyOnWriteArraySet<>();
// Добавление нового подписчика
listeners.add(newEventListener);
// Оповещение всех подписчиков о событии
for (EventListener listener : listeners) {
listener.onEvent(event);
}
Этот подход позволяет избежать проблем с одновременным изменением списка подписчиков и оповещением, обеспечивая безопасность и корректность работы в многопоточной среде.
Многопоточная работа с уникальными значениями:
CopyOnWriteArraySet идеально подходит для работы с множествами данных в многопоточной среде, где важна уникальность значений. Например, при разработке кеша для хранения уникальных запросов.
CopyOnWriteArraySet<String> queryCache = new CopyOnWriteArraySet<>();
// Добавление запроса в кеш
queryCache.add("SELECT * FROM users WHERE id=1");
// Проверка наличия запроса в кеше
if (queryCache.contains("SELECT * FROM users WHERE id=1")) {
// Обработка запроса из кеша
}
#Java #Training #Medium #CopyOnWriteArraySet
Уважаемые подписчики!
В воскресение, в 16:00 по МСК, мы вновь соберемся для онлайн встречи и будем рассматривать последние 4 поведенческих паттерна.
Кроме того, хотелось бы обсудить множество возникающих у Вас вопросов о формате подачи материала, рассматриваемых тем и будущего канала.
Хотелось бы услышать мнение лично от Вас!
Ждем всех, хотя бы на несколько минут!
Ну или как минимум, напишите в комментах, почему не можете)))
В воскресение, в 16:00 по МСК, мы вновь соберемся для онлайн встречи и будем рассматривать последние 4 поведенческих паттерна.
Кроме того, хотелось бы обсудить множество возникающих у Вас вопросов о формате подачи материала, рассматриваемых тем и будущего канала.
Хотелось бы услышать мнение лично от Вас!
Ждем всех, хотя бы на несколько минут!
👍2
Всем доброго субботнего утра! 🔆
У кого какие планы на сегодня?
Родятся ли сегодня новые pet-проекты?)))
Напоминаю, что у нас есть чат, где можно без проблем что-то спросить или просто поболтать)
https://t.me/Java_Beginner_chat
Пишите если есть вопросы!
И кроме этого, всем и каждому, замечательных выходных! 👍
У кого какие планы на сегодня?
Родятся ли сегодня новые pet-проекты?)))
Напоминаю, что у нас есть чат, где можно без проблем что-то спросить или просто поболтать)
https://t.me/Java_Beginner_chat
Пишите если есть вопросы!
И кроме этого, всем и каждому, замечательных выходных! 👍
👍3
Оглавление обучающих постов часть 1.
История и особенности языка Java
Основы синтаксиса Java
Объявление переменных
Операнды cравнения в Java
Логические операторы
Управляющие конструкции
Циклы
Массивы в Java
Массивы: Обход и основные операции
Введение в ООП и основы классов и объектов
Классы и объекты
Поля и методы класса. Конструкторы
Методы класса
Конструкторы
Статические и блоки инициализации
Инкапсуляция и модификаторы доступа
Абстракция и примеры применения
Наследование
Переопределение методов
Полиморфизм
Абстрактные классы и методы
Интерфейсы
Различия между абстрактными классами и интерфейсами
Перегрузка метода
Пакеты и импорт
Основные принципы организации классов и пакетов
Исключения: Основы
Обработка исключений
Создание собственных исключений
Вложенные и множественные catch блоки
Строки: Основные операции
Класс String и его методы
StringBuilder и StringBuffer
Разница между String, StringBuilder и StringBuffer
Collections, особенности и внутреннее устройство
Коллекции
Arrays, особенности и внутреннее устройство
List, ArrayList, LinkedList
Set, HashSet, TreeSet
Map, HashMap, TreeMap
Введение в I/O (Input/Output)
Классы File и Path
Чтение и запись файлов: FileReader, FileWriter
Буферизованные потоки: BufferedReader, BufferedWriter
Работа с байтовыми потоками: InputStream, OutputStream
Работа с буферизованными байтовыми потоками: BufferedInputStream, BufferedOutputStream
Объектные потоки: ObjectInputStream, ObjectOutputStream
Сериализация и десериализация объектов
Классы-обёртки (Wrapper classes): Integer, Double
Автоупаковка (Autoboxing) и распаковка (Unboxing)
Класс Object и его значение в Java
Другие методы класса Object
Операторы присваивания, инкремента-декремента в Java
Введение в Queue
Введение в Stack
Дженерики
Продвинутые возможности дженериков
Внутренние классы
Статические вложенные классы и примеры использования внутренних классов
Лямбда-выражения
Применение лямбда-выражений в коллекциях и Stream API
Введение в Stream API и основные методы создания стримов
Терминальные методы Stream API
Многопоточность
Использование synchronized в многопоточности
Условные переменные
Многопоточность в Java: wait и notify
Продвинутые аспекты wait и notify
Асинхронизм и Future в Java
CompletableFuture в Java
Комбинирование CompletableFuture
Многопоточность в Java: volatile и Immutable Classes
Многопоточность в Java: Deadlock
Многопоточность в Java: Пул потоков
Многопоточность в Java: ExecutorService
Concurrency
Продвинутые методы ConcurrentHashMap
#Contents
История и особенности языка Java
Основы синтаксиса Java
Объявление переменных
Операнды cравнения в Java
Логические операторы
Управляющие конструкции
Циклы
Массивы в Java
Массивы: Обход и основные операции
Введение в ООП и основы классов и объектов
Классы и объекты
Поля и методы класса. Конструкторы
Методы класса
Конструкторы
Статические и блоки инициализации
Инкапсуляция и модификаторы доступа
Абстракция и примеры применения
Наследование
Переопределение методов
Полиморфизм
Абстрактные классы и методы
Интерфейсы
Различия между абстрактными классами и интерфейсами
Перегрузка метода
Пакеты и импорт
Основные принципы организации классов и пакетов
Исключения: Основы
Обработка исключений
Создание собственных исключений
Вложенные и множественные catch блоки
Строки: Основные операции
Класс String и его методы
StringBuilder и StringBuffer
Разница между String, StringBuilder и StringBuffer
Collections, особенности и внутреннее устройство
Коллекции
Arrays, особенности и внутреннее устройство
List, ArrayList, LinkedList
Set, HashSet, TreeSet
Map, HashMap, TreeMap
Введение в I/O (Input/Output)
Классы File и Path
Чтение и запись файлов: FileReader, FileWriter
Буферизованные потоки: BufferedReader, BufferedWriter
Работа с байтовыми потоками: InputStream, OutputStream
Работа с буферизованными байтовыми потоками: BufferedInputStream, BufferedOutputStream
Объектные потоки: ObjectInputStream, ObjectOutputStream
Сериализация и десериализация объектов
Классы-обёртки (Wrapper classes): Integer, Double
Автоупаковка (Autoboxing) и распаковка (Unboxing)
Класс Object и его значение в Java
Другие методы класса Object
Операторы присваивания, инкремента-декремента в Java
Введение в Queue
Введение в Stack
Дженерики
Продвинутые возможности дженериков
Внутренние классы
Статические вложенные классы и примеры использования внутренних классов
Лямбда-выражения
Применение лямбда-выражений в коллекциях и Stream API
Введение в Stream API и основные методы создания стримов
Терминальные методы Stream API
Многопоточность
Использование synchronized в многопоточности
Условные переменные
Многопоточность в Java: wait и notify
Продвинутые аспекты wait и notify
Асинхронизм и Future в Java
CompletableFuture в Java
Комбинирование CompletableFuture
Многопоточность в Java: volatile и Immutable Classes
Многопоточность в Java: Deadlock
Многопоточность в Java: Пул потоков
Многопоточность в Java: ExecutorService
Concurrency
Продвинутые методы ConcurrentHashMap
#Contents
🔥9👍3
Java for Beginner pinned «Оглавление обучающих постов часть 1. История и особенности языка Java Основы синтаксиса Java Объявление переменных Операнды cравнения в Java Логические операторы Управляющие конструкции Циклы Массивы в Java Массивы: Обход и основные операции Введение в ООП…»
This media is not supported in your browser
VIEW IN TELEGRAM
Уважаемые подписчики!
Напоминаю, что сегодня в 16:00 по МСК, мы вновь соберемся на онлайн встречу и будем рассматривать последние 4 поведенческих паттерна.
Кроме того, хотелось бы обсудить множество возникающих у Вас вопросов о формате подачи материала, рассматриваемых тем и будущего канала.
Хотелось бы собрать как можно больше народу и услышать мнение каждого!🫡
Жду всех, хотя бы на несколько минут!
Напоминаю, что сегодня в 16:00 по МСК, мы вновь соберемся на онлайн встречу и будем рассматривать последние 4 поведенческих паттерна.
Кроме того, хотелось бы обсудить множество возникающих у Вас вопросов о формате подачи материала, рассматриваемых тем и будущего канала.
Хотелось бы собрать как можно больше народу и услышать мнение каждого!🫡
Жду всех, хотя бы на несколько минут!
Запись нашей вчерашней встречи -
YOUTUBE
RUTUBE
Спасибо тем кто смог прийти, за участие, вопросы и подсказки! Оценил!
Жаль, что все таки для обсуждения пришло не так много участников как хотелось. 😐
На встрече, мы рассмотрели на примерах последние из поведенческих паттернов проектирования:
- Состояние (State)
- Стратегия (Strategy)
- Шаблонный метод (Template Method)
- Посетитель (Visitor)
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Гит репозиторий с результатом - https://github.com/Oleborn/PatternsOfCoding
Всем доброго утра и легкой рабочей недели! 🫡✌️
YOUTUBE
RUTUBE
Спасибо тем кто смог прийти, за участие, вопросы и подсказки! Оценил!
Жаль, что все таки для обсуждения пришло не так много участников как хотелось. 😐
На встрече, мы рассмотрели на примерах последние из поведенческих паттернов проектирования:
- Состояние (State)
- Стратегия (Strategy)
- Шаблонный метод (Template Method)
- Посетитель (Visitor)
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Гит репозиторий с результатом - https://github.com/Oleborn/PatternsOfCoding
Всем доброго утра и легкой рабочей недели! 🫡✌️
Встреча_в_Телемосте_25_08_24_20_02_39_—_запись.webm
142.1 MB
Для тех кто не смог победить блокировку Youtube и не желает заходить в Rutube выкладываю видео тут!
Смотрите на здоровье) 🫡
#online_meeting
Смотрите на здоровье) 🫡
#online_meeting
👍2
BitSet, особенности и внутреннее устройство
BitSet — это класс в Java, который представляет собой массив битов с возможностью их динамического увеличения. Он используется для эффективного хранения и манипулирования наборами булевых значений (битов), где каждый бит может быть true (1) или false (0). BitSet принадлежит к пакету java.util и является полезным инструментом для выполнения операций на уровне битов, таких как поиск битовых масок, управление множествами, или работа с флагами.
Особенности BitSet
Эффективное использование памяти:
BitSet предназначен для экономии памяти. В отличие от массивов типа boolean[], где каждый элемент занимает 1 байт, BitSet использует один бит на каждое значение, что значительно снижает объем памяти, требуемой для хранения большого количества булевых значений.
Динамическое расширение:
BitSet динамически изменяет размер своего внутреннего хранилища по мере добавления или изменения значений. Это позволяет работать с большими наборами битов без необходимости заранее задавать их размер.
Быстрые битовые операции:
BitSet предоставляет быстрые методы для выполнения битовых операций, таких как AND, OR, XOR, и NOT. Эти операции применяются ко всему набору битов, что делает BitSet мощным инструментом для задач, требующих обработки множества булевых значений.
Легкость использования:
BitSet предоставляет удобные методы для установки, сброса, проверки и изменения битов по их индексам. Это упрощает работу с булевыми массивами и делает код более читаемым.
Внутреннее устройство BitSet
BitSet внутри представляет собой массив типа long[], где каждый элемент массива хранит 64 бита. Это позволяет хранить биты компактно и выполнять операции на уровне битов очень быстро, используя встроенные в процессор операции.
Основная структура данных:
Основой BitSet является массив long[]. Каждый элемент этого массива представляет собой 64 бита, которые могут быть установлены в 0 или 1.
Динамическое расширение массива:
Когда в BitSet устанавливается бит с индексом, превышающим текущий размер массива words, происходит расширение массива.
Битовые операции:
Основные битовые операции (AND, OR, XOR, NOT) выполняются непосредственно на массиве long[], что обеспечивает высокую производительность. Например, операция AND проходит по каждому элементу массива words и применяет побитовую операцию AND:
Индексация битов:
Для работы с конкретными битами внутри BitSet, используется индексация. Индекс бита определяет, в каком элементе массива words он находится, и его позицию внутри этого элемента.
Эффективное использование памяти и производительности:
Благодаря использованию long[], BitSet позволяет эффективно управлять памятью, особенно при работе с большими наборами данных. Битовые операции выполняются быстро, что делает этот класс пригодным для задач, требующих высокой производительности.
#Java #Training #Medium #BitSet
BitSet — это класс в Java, который представляет собой массив битов с возможностью их динамического увеличения. Он используется для эффективного хранения и манипулирования наборами булевых значений (битов), где каждый бит может быть true (1) или false (0). BitSet принадлежит к пакету java.util и является полезным инструментом для выполнения операций на уровне битов, таких как поиск битовых масок, управление множествами, или работа с флагами.
Особенности BitSet
Эффективное использование памяти:
BitSet предназначен для экономии памяти. В отличие от массивов типа boolean[], где каждый элемент занимает 1 байт, BitSet использует один бит на каждое значение, что значительно снижает объем памяти, требуемой для хранения большого количества булевых значений.
Динамическое расширение:
BitSet динамически изменяет размер своего внутреннего хранилища по мере добавления или изменения значений. Это позволяет работать с большими наборами битов без необходимости заранее задавать их размер.
Быстрые битовые операции:
BitSet предоставляет быстрые методы для выполнения битовых операций, таких как AND, OR, XOR, и NOT. Эти операции применяются ко всему набору битов, что делает BitSet мощным инструментом для задач, требующих обработки множества булевых значений.
Легкость использования:
BitSet предоставляет удобные методы для установки, сброса, проверки и изменения битов по их индексам. Это упрощает работу с булевыми массивами и делает код более читаемым.
Внутреннее устройство BitSet
BitSet внутри представляет собой массив типа long[], где каждый элемент массива хранит 64 бита. Это позволяет хранить биты компактно и выполнять операции на уровне битов очень быстро, используя встроенные в процессор операции.
Основная структура данных:
Основой BitSet является массив long[]. Каждый элемент этого массива представляет собой 64 бита, которые могут быть установлены в 0 или 1.
public class BitSet implements Cloneable, Serializable {
private long[] words;
private int wordsInUse = 0;
// другие поля и методы...
}
Массив words динамически расширяется по мере необходимости. Параметр wordsInUse отслеживает количество используемых элементов в массиве.
Динамическое расширение массива:
Когда в BitSet устанавливается бит с индексом, превышающим текущий размер массива words, происходит расширение массива.
private void ensureCapacity(int wordsRequired) {
if (words.length < wordsRequired) {
// логика увеличения размера массива...
}
}
Этот процесс автоматический и управляется самим классом BitSet, что позволяет пользователю не беспокоиться о ручном управлении памятью.
Битовые операции:
Основные битовые операции (AND, OR, XOR, NOT) выполняются непосредственно на массиве long[], что обеспечивает высокую производительность. Например, операция AND проходит по каждому элементу массива words и применяет побитовую операцию AND:
public void and(BitSet set) {
for (int i = 0; i < wordsInUse; i++) {
words[i] &= set.words[i];
}
recalculateWordsInUse();
}
Это позволяет применять операции ко всему набору битов за один проход, минимизируя затраты времени.
Индексация битов:
Для работы с конкретными битами внутри BitSet, используется индексация. Индекс бита определяет, в каком элементе массива words он находится, и его позицию внутри этого элемента.
private static int wordIndex(int bitIndex) {
return bitIndex >> 6; // Эквивалентно делению на 64
}
public void set(int bitIndex) {
int wordIndex = wordIndex(bitIndex);
words[wordIndex] |= (1L << bitIndex);
}
Здесь метод wordIndex вычисляет индекс элемента массива, в котором находится нужный бит, а побитовый сдвиг устанавливает значение этого бита.
Эффективное использование памяти и производительности:
Благодаря использованию long[], BitSet позволяет эффективно управлять памятью, особенно при работе с большими наборами данных. Битовые операции выполняются быстро, что делает этот класс пригодным для задач, требующих высокой производительности.
#Java #Training #Medium #BitSet
👍1
❗️❗️❗️2️⃣0️⃣0️⃣ подписчиков!!! ❗️❗️❗️
Ребят, я не знаю, как и зачем Вы к нам пришли, но по всей видимости Вы что-то ищете и ждете от нашего канала.
Я всеми силами буду стараться это Вам дать, и продолжать обучать и самообучаться Java дальше!🫡
Независимо от всего этого я искренне благодарен всем, кто находится здесь, приходит на встречи, интересуется и пишет комментарии, участвует в обсуждениях в чате!
Спасибо ребят!🤝
Давайте и дальше становиться лучшим пабликом для изучающих Java!💪
Дальше будет интереснее....😏
Ребят, я не знаю, как и зачем Вы к нам пришли, но по всей видимости Вы что-то ищете и ждете от нашего канала.
Я всеми силами буду стараться это Вам дать, и продолжать обучать и самообучаться Java дальше!🫡
Независимо от всего этого я искренне благодарен всем, кто находится здесь, приходит на встречи, интересуется и пишет комментарии, участвует в обсуждениях в чате!
Спасибо ребят!🤝
Давайте и дальше становиться лучшим пабликом для изучающих Java!💪
Дальше будет интереснее....😏
❤5👍3❤🔥1🔥1
Что выведет код?
#Tasks
import java.util.BitSet;
public class Main {
public static void main(String[] args) {
BitSet bitset = new BitSet(10);
bitset.set(0);
bitset.set(3);
bitset.set(5);
bitset.set(7);
bitset.flip(0, 6);
bitset.clear(7);
for (int i = 0; i < 10; i++) {
System.out.print(bitset.get(i) ? "1" : "0");
}
}
}
#Tasks
🔥2👍1
👍1
Основные методы BitSet и их использование
set(int bitIndex) и set(int fromIndex, int toIndex):
Эти методы используются для установки бита или диапазона битов в значение true.
clear(int bitIndex) и clear(int fromIndex, int toIndex):
Эти методы сбрасывают бит или диапазон битов, устанавливая их в false.
get(int bitIndex) и get(int fromIndex, int toIndex):
Эти методы возвращают значение конкретного бита или диапазона битов.
flip(int bitIndex) и flip(int fromIndex, int toIndex):
Переключает (инвертирует) бит или диапазон битов.
length() и size():
length() возвращает индекс самого старшего бита плюс один, т.е. логическую длину BitSet.
size() возвращает текущий размер внутреннего массива, который является кратным 64.
cardinality():
Возвращает количество установленных в true битов (так называемая "мощность" множества).
and(BitSet set), or(BitSet set), xor(BitSet set):
Методы выполняют побитовые операции AND, OR, XOR над текущим BitSet и заданным BitSet.
intersects(BitSet set):
Проверяет, есть ли общие установленные биты между двумя BitSet.
isEmpty():
Проверяет, есть ли хотя бы один установленный бит в BitSet.
stream():
Позволяет создать поток из установленных битов BitSet. Этот метод особенно полезен для работы с Stream API.
Примеры использования
Оптимизация использования памяти:
Если вам нужно хранить большой набор булевых значений, BitSet помогает оптимизировать использование памяти, так как каждый бит занимает всего 1 бит.
#Java #Training #Medium #BitSet
set(int bitIndex) и set(int fromIndex, int toIndex):
Эти методы используются для установки бита или диапазона битов в значение true.
BitSet bitSet = new BitSet();
bitSet.set(2); // Устанавливает бит с индексом 2 в true
bitSet.set(4, 7); // Устанавливает биты с индексами 4, 5 и 6 в true
Если указать диапазон, все биты в этом диапазоне будут установлены в true.
clear(int bitIndex) и clear(int fromIndex, int toIndex):
Эти методы сбрасывают бит или диапазон битов, устанавливая их в false.
bitSet.clear(2); // Сбрасывает бит с индексом 2 в false
bitSet.clear(4, 7); // Сбрасывает биты с индексами 4, 5 и 6 в false
Полезно для обнуления значений или удаления флагов.
get(int bitIndex) и get(int fromIndex, int toIndex):
Эти методы возвращают значение конкретного бита или диапазона битов.
boolean value = bitSet.get(2); // Получает значение бита с индексом 2
BitSet subSet = bitSet.get(4, 7); // Получает поднабор битов с 4 до 6
Возвращаемое значение может быть true или false, а в случае диапазона — новый BitSet.
flip(int bitIndex) и flip(int fromIndex, int toIndex):
Переключает (инвертирует) бит или диапазон битов.
bitSet.flip(2); // Инвертирует бит с индексом 2
bitSet.flip(4, 7); // Инвертирует биты с 4 до 6
Если бит был true, он станет false, и наоборот.
length() и size():
length() возвращает индекс самого старшего бита плюс один, т.е. логическую длину BitSet.
size() возвращает текущий размер внутреннего массива, который является кратным 64.
System.out.println("Length: " + bitSet.length()); // Логическая длина BitSet
System.out.println("Size: " + bitSet.size()); // Текущий размер внутреннего массива
Эти методы полезны для анализа содержимого BitSet и его текущего состояния.
cardinality():
Возвращает количество установленных в true битов (так называемая "мощность" множества).
int numberOfBits = bitSet.cardinality(); // Количество установленных битов
Полезно, когда нужно узнать, сколько значений true содержится в наборе.
and(BitSet set), or(BitSet set), xor(BitSet set):
Методы выполняют побитовые операции AND, OR, XOR над текущим BitSet и заданным BitSet.
BitSet bitSet1 = new BitSet();
bitSet1.set(1);
bitSet1.set(3);
BitSet bitSet2 = new BitSet();
bitSet2.set(2);
bitSet2.set(3);
bitSet1.and(bitSet2); // AND операция между bitSet1 и bitSet2
bitSet1.or(bitSet2); // OR операция между bitSet1 и bitSet2
bitSet1.xor(bitSet2); // XOR операция между bitSet1 и bitSet2
Эти методы полезны для выполнения сложных битовых операций между двумя наборами.
intersects(BitSet set):
Проверяет, есть ли общие установленные биты между двумя BitSet.
boolean hasIntersection = bitSet1.intersects(bitSet2); // true, если есть общие биты
Метод возвращает true, если есть хотя бы один бит, который установлен в true в обоих наборах.
isEmpty():
Проверяет, есть ли хотя бы один установленный бит в BitSet.
boolean isEmpty = bitSet.isEmpty(); // true, если все биты сброшены
Полезно для проверки пустоты множества.
stream():
Позволяет создать поток из установленных битов BitSet. Этот метод особенно полезен для работы с Stream API.
bitSet.stream().forEach(System.out::println); // Выводит индексы установленных битов
Это удобный способ итерирования по установленным битам с использованием функциональных возможностей Java.
Примеры использования
Оптимизация использования памяти:
Если вам нужно хранить большой набор булевых значений, BitSet помогает оптимизировать использование памяти, так как каждый бит занимает всего 1 бит.
BitSet largeSet = new BitSet();
for (int i = 0; i < 1000000; i++) {
if (i % 2 == 0) {
largeSet.set(i);
}
}
System.out.println("Количество установленных битов: " + largeSet.cardinality());
В этом примере BitSet используется для хранения большого количества булевых значений, что значительно экономит память по сравнению с использованием массивов boolean[].
#Java #Training #Medium #BitSet