This media is not supported in your browser
VIEW IN TELEGRAM
Напоминаю!☝️
Сегодня в 16:00 по МСК, мы вновь собираемся на онлайн встречу)))
От нас лайф-кодинг, от Вас хорошее настроение и подсказки!))))😉
Ждем всех!🫡
Сегодня в 16:00 по МСК, мы вновь собираемся на онлайн встречу)))
От нас лайф-кодинг, от Вас хорошее настроение и подсказки!))))😉
Ждем всех!🫡
Запись нашей сегодняшней встречи -
https://www.youtube.com/watch?v=Ryv47d3ggZw
https://rutube.ru/video/354b75fec305b2d3c678a5b58a4b70fe/
Огромная благодарность тем кто был, за участие и подсказки!
@Alexander_Gors отдельное спасибо, за лайф-кодинг!)
Сегодня, мы совместно рассмотрели на примерах порождающие паттерны проектирования:
- Фабричный метод (Factory Method)
- Абстрактная фабрика (Abstract Factory)
- Прототип (Prototype)
- Одиночка (Singleton)
- Строитель (Builder)
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Гит репозиторий с результатом - https://github.com/Oleborn/PatternsOfCoding
Всем светлого и пенного 🍻😉
https://www.youtube.com/watch?v=Ryv47d3ggZw
https://rutube.ru/video/354b75fec305b2d3c678a5b58a4b70fe/
Огромная благодарность тем кто был, за участие и подсказки!
@Alexander_Gors отдельное спасибо, за лайф-кодинг!)
Сегодня, мы совместно рассмотрели на примерах порождающие паттерны проектирования:
- Фабричный метод (Factory Method)
- Абстрактная фабрика (Abstract Factory)
- Прототип (Prototype)
- Одиночка (Singleton)
- Строитель (Builder)
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Гит репозиторий с результатом - https://github.com/Oleborn/PatternsOfCoding
Всем светлого и пенного 🍻😉
Встреча_в_Телемосте_04_08_24_20_16_33_—_запись.webm
224.1 MB
Для тех кто не смог победить блокировку Youtube и не желает заходить в Rutube выкладываю видео тут!
Смотрите на здоровье) 🫡
#online_meeting
Смотрите на здоровье) 🫡
#online_meeting
Vector, отличия от ArrayList
Vector — это класс из пакета java.util, который реализует интерфейсы List, RandomAccess, Cloneable и Serializable. Этот класс предоставляет возможность создания динамически изменяемых массивов, которые могут автоматически увеличивать свой размер.
В отличие от ArrayList, класс Vector является синхронизированным, что делает его безопасным для использования в многопоточной среде без необходимости в дополнительной синхронизации.
История и использование
Vector был введен в первых версиях Java и являлся основным динамическим массивом до появления ArrayList в Java 2 (JDK 1.2). С тех пор, ArrayList стал более предпочтительным выбором для однопоточных приложений благодаря своей более высокой производительности.
Отличия от ArrayList
Синхронизация:
Vector: Все методы класса синхронизированы, что делает его потокобезопасным. Это приводит к некоторому снижению производительности при выполнении операций.
ArrayList: Не синхронизирован. Если требуется потокобезопасность, нужно вручную синхронизировать методы или использовать внешние блокировки.
Увеличение емкости:
Vector: По умолчанию удваивает свой размер при переполнении, что может привести к резкому увеличению памяти.
ArrayList: Увеличивает свою емкость на 50% при необходимости, что делает его более гибким в плане использования памяти.
Методы добавления и удаления элементов:
Оба класса имеют схожие методы для добавления, удаления и доступа к элементам. Однако из-за синхронизации, методы Vector несколько медленнее.
Пример использования Vector
Когда использовать Vector
Используйте Vector, когда требуется потокобезопасная коллекция с динамическим изменением размера и когда методы будут вызываться из нескольких потоков одновременно.
Если потокобезопасность не требуется, предпочтение лучше отдать ArrayList, так как он имеет лучшую производительность благодаря отсутствию синхронизации.
Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.baeldung.com/java-vector-guide
https://proglang.su/java/vector-class
#Java #Training #Medium #Vector
Vector — это класс из пакета java.util, который реализует интерфейсы List, RandomAccess, Cloneable и Serializable. Этот класс предоставляет возможность создания динамически изменяемых массивов, которые могут автоматически увеличивать свой размер.
В отличие от ArrayList, класс Vector является синхронизированным, что делает его безопасным для использования в многопоточной среде без необходимости в дополнительной синхронизации.
История и использование
Vector был введен в первых версиях Java и являлся основным динамическим массивом до появления ArrayList в Java 2 (JDK 1.2). С тех пор, ArrayList стал более предпочтительным выбором для однопоточных приложений благодаря своей более высокой производительности.
Отличия от ArrayList
Синхронизация:
Vector: Все методы класса синхронизированы, что делает его потокобезопасным. Это приводит к некоторому снижению производительности при выполнении операций.
ArrayList: Не синхронизирован. Если требуется потокобезопасность, нужно вручную синхронизировать методы или использовать внешние блокировки.
Увеличение емкости:
Vector: По умолчанию удваивает свой размер при переполнении, что может привести к резкому увеличению памяти.
ArrayList: Увеличивает свою емкость на 50% при необходимости, что делает его более гибким в плане использования памяти.
Методы добавления и удаления элементов:
Оба класса имеют схожие методы для добавления, удаления и доступа к элементам. Однако из-за синхронизации, методы Vector несколько медленнее.
Пример использования Vector
import java.util.Vector;
public class VectorExample {
public static void main(String[] args) {
// Создание вектора с начальной емкостью 10
Vector<String> vector = new Vector<>(10);
// Добавление элементов
vector.add("Element 1");
vector.add("Element 2");
vector.add("Element 3");
// Чтение элементов
System.out.println("Element at index 1: " + vector.get(1));
// Удаление элемента
vector.remove(2);
// Итерация по элементам
for (String element : vector) {
System.out.println("Element: " + element);
}
}
}
Когда использовать Vector
Используйте Vector, когда требуется потокобезопасная коллекция с динамическим изменением размера и когда методы будут вызываться из нескольких потоков одновременно.
Если потокобезопасность не требуется, предпочтение лучше отдать ArrayList, так как он имеет лучшую производительность благодаря отсутствию синхронизации.
Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.baeldung.com/java-vector-guide
https://proglang.su/java/vector-class
#Java #Training #Medium #Vector
Baeldung
Intro to Vector Class in Java | Baeldung
Learn about the Vector class and explore some of its most common operations and methods.
Что выведет код?
#Tasks
import java.util.Vector;
public class VectorChallenge {
public static void main(String[] args) {
Vector<Integer> vector = new Vector<>();
vector.add(15);
vector.add(30);
vector.add(45);
vector.add(60);
vector.add(75);
// Iterate and modify
for (int i = 0; i < vector.size(); i++) {
if (vector.get(i) % 30 == 0) {
vector.set(i, vector.get(i) / 2);
}
}
// Add new elements
vector.add(10);
vector.add(20);
int sum = 0;
for (int num : vector) {
sum += num;
}
System.out.println("Sum: " + sum);
}
}
#Tasks
Внутреннее устройство и основные методы Vector
Как и ArrayList, Vector основан на массиве, который динамически изменяет свой размер. Основные особенности внутреннего устройства Vector включают:
Массив для хранения данных:
Внутренне Vector использует массив Object[] elementData для хранения элементов.
Поле size хранит количество элементов в векторе.
Синхронизация:
Все методы класса синхронизированы, что обеспечивает потокобезопасность.
Управление емкостью:
При создании Vector можно задать начальную емкость и коэффициент увеличения (capacityIncrement). Если коэффициент не задан, то при переполнении емкость вектора удваивается.
Основные методы Vector
Конструкторы:
Vector(): Создает пустой вектор с начальной емкостью 10.
Vector(int initialCapacity): Создает пустой вектор с указанной начальной емкостью.
Vector(int initialCapacity, int capacityIncrement): Создает пустой вектор с указанной начальной емкостью и коэффициентом увеличения.
Vector(Collection<? extends E> c): Создает вектор, содержащий элементы указанной коллекции.
Методы добавления элементов:
boolean add(E e): Добавляет элемент в конец вектора.
void add(int index, E element): Вставляет элемент в указанную позицию, сдвигая элементы вправо.
Методы доступа к элементам:
E get(int index): Возвращает элемент, находящийся в указанной позиции.
int size(): Возвращает количество элементов в векторе.
Методы удаления элементов:
boolean remove(Object o): Удаляет первое вхождение указанного элемента.
E remove(int index): Удаляет элемент в указанной позиции и возвращает его.
Итерация по элементам:
Enumeration<E> elements(): Возвращает объект Enumeration для перебора элементов вектора.
Iterator<E> iterator(): Возвращает объект Iterator для перебора элементов вектора.
Преимущества и недостатки Vector
Преимущества:
Потокобезопасность: Синхронизация методов делает Vector безопасным для использования в многопоточной среде.
Динамическое изменение размера: Вектор автоматически увеличивает свою емкость при добавлении новых элементов.
Недостатки:
Низкая производительность: Из-за синхронизации методов производительность Vector может быть ниже, чем у ArrayList.
Высокие накладные расходы: При частых операциях добавления или удаления элементов синхронизация и увеличение емкости могут создавать дополнительные накладные расходы.
#Java #Training #Medium #Vector
Как и ArrayList, Vector основан на массиве, который динамически изменяет свой размер. Основные особенности внутреннего устройства Vector включают:
Массив для хранения данных:
Внутренне Vector использует массив Object[] elementData для хранения элементов.
Поле size хранит количество элементов в векторе.
Синхронизация:
Все методы класса синхронизированы, что обеспечивает потокобезопасность.
Управление емкостью:
При создании Vector можно задать начальную емкость и коэффициент увеличения (capacityIncrement). Если коэффициент не задан, то при переполнении емкость вектора удваивается.
Основные методы Vector
Конструкторы:
Vector(): Создает пустой вектор с начальной емкостью 10.
Vector(int initialCapacity): Создает пустой вектор с указанной начальной емкостью.
Vector(int initialCapacity, int capacityIncrement): Создает пустой вектор с указанной начальной емкостью и коэффициентом увеличения.
Vector(Collection<? extends E> c): Создает вектор, содержащий элементы указанной коллекции.
Методы добавления элементов:
boolean add(E e): Добавляет элемент в конец вектора.
Vector<String> vector = new Vector<>();
vector.add("Element 1");
void add(int index, E element): Вставляет элемент в указанную позицию, сдвигая элементы вправо.
vector.add(1, "Element 2");
Методы доступа к элементам:
E get(int index): Возвращает элемент, находящийся в указанной позиции.
String element = vector.get(0);
int size(): Возвращает количество элементов в векторе.
int size = vector.size();
Методы удаления элементов:
boolean remove(Object o): Удаляет первое вхождение указанного элемента.
vector.remove("Element 1");
E remove(int index): Удаляет элемент в указанной позиции и возвращает его.
vector.remove(0);
Итерация по элементам:
Enumeration<E> elements(): Возвращает объект Enumeration для перебора элементов вектора.
Enumeration<String> enumeration = vector.elements();
while (enumeration.hasMoreElements()) {
System.out.println("Element: " + enumeration.nextElement());
}
Iterator<E> iterator(): Возвращает объект Iterator для перебора элементов вектора.
Iterator<String> iterator = vector.iterator();
while (iterator.hasNext()) {
System.out.println("Element: " + iterator.next());
}
Преимущества и недостатки Vector
Преимущества:
Потокобезопасность: Синхронизация методов делает Vector безопасным для использования в многопоточной среде.
Динамическое изменение размера: Вектор автоматически увеличивает свою емкость при добавлении новых элементов.
Недостатки:
Низкая производительность: Из-за синхронизации методов производительность Vector может быть ниже, чем у ArrayList.
Высокие накладные расходы: При частых операциях добавления или удаления элементов синхронизация и увеличение емкости могут создавать дополнительные накладные расходы.
#Java #Training #Medium #Vector
Stack, особенности и примеры использования
Stack — это класс из пакета java.util, который реализует структуру данных "стек" (stack). Стек работает по принципу LIFO (Last In, First Out), что означает, что последний добавленный элемент будет первым, который удаляется. Эта структура данных полезна в случаях, когда требуется обратный порядок обработки данных, например, в алгоритмах обхода графов или в реализации операций отмены (undo).
Особенности Stack
Синхронизация: Stack является синхронизированным классом, что делает его безопасным для использования в многопоточной среде. Однако, как и Vector, это может привести к снижению производительности в однопоточных приложениях.
Наследование от Vector: Stack наследует все методы от класса Vector и добавляет свои методы, специфичные для работы с LIFO структурой.
Устаревший класс: В современных приложениях предпочтительнее использовать Deque интерфейс и его реализации (ArrayDeque или LinkedList), которые предлагают более гибкие и эффективные способы работы с данными, чем Stack.
Примеры использования
Обратный порядок строки:
Проверка корректности скобок:
Перевод инфиксного выражения в постфиксное:
Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.baeldung.com/java-stack
#Java #Training #Medium #Stack
Stack — это класс из пакета java.util, который реализует структуру данных "стек" (stack). Стек работает по принципу LIFO (Last In, First Out), что означает, что последний добавленный элемент будет первым, который удаляется. Эта структура данных полезна в случаях, когда требуется обратный порядок обработки данных, например, в алгоритмах обхода графов или в реализации операций отмены (undo).
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
// Добавление элементов в стек
stack.push("Element 1");
stack.push("Element 2");
stack.push("Element 3");
// Чтение верхнего элемента стека без его удаления
System.out.println("Top element: " + stack.peek());
// Удаление верхнего элемента стека
System.out.println("Popped element: " + stack.pop());
// Чтение элементов после удаления
System.out.println("Top element after pop: " + stack.peek());
}
}
Особенности Stack
Синхронизация: Stack является синхронизированным классом, что делает его безопасным для использования в многопоточной среде. Однако, как и Vector, это может привести к снижению производительности в однопоточных приложениях.
Наследование от Vector: Stack наследует все методы от класса Vector и добавляет свои методы, специфичные для работы с LIFO структурой.
Устаревший класс: В современных приложениях предпочтительнее использовать Deque интерфейс и его реализации (ArrayDeque или LinkedList), которые предлагают более гибкие и эффективные способы работы с данными, чем Stack.
Примеры использования
Обратный порядок строки:
public static String reverseString(String input) {
Stack<Character> stack = new Stack<>();
for (char c : input.toCharArray()) {
stack.push(c);
}
StringBuilder reversed = new StringBuilder();
while (!stack.isEmpty()) {
reversed.append(stack.pop());
}
return reversed.toString();
}
Проверка корректности скобок:
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
} else {
if (stack.isEmpty()) return false;
char top = stack.pop();
if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {
return false;
}
}
}
return stack.isEmpty();
}
Перевод инфиксного выражения в постфиксное:
public static String infixToPostfix(String expression) {
Stack<Character> stack = new Stack<>();
StringBuilder result = new StringBuilder();
for (char c : expression.toCharArray()) {
if (Character.isLetterOrDigit(c)) {
result.append(c);
} else if (c == '(') {
stack.push(c);
} else if (c == ')') {
while (!stack.isEmpty() && stack.peek() != '(') {
result.append(stack.pop());
}
stack.pop();
} else {
while (!stack.isEmpty() && precedence(c) <= precedence(stack.peek())) {
result.append(stack.pop());
}
stack.push(c);
}
}
while (!stack.isEmpty()) {
result.append(stack.pop());
}
return result.toString();
}
public static int precedence(char ch) {
switch (ch) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '^':
return 3;
}
return -1;
}
Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.baeldung.com/java-stack
#Java #Training #Medium #Stack
Baeldung
Quick Guide to Java Stack | Baeldung
A quick and practical guide to common operations of the java.util.Stack.
Что выведет код?
#Tasks
import java.util.Stack;
public class StackChallenge {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(10);
stack.push(20);
stack.push(30);
stack.push(40);
stack.push(50);
int sum = 0;
while (!stack.isEmpty()) {
int value = stack.pop();
if (value % 20 == 0) {
stack.push(value / 2);
} else {
sum += value;
}
}
System.out.println("Sum: " + sum);
}
}
#Tasks
Внутреннее устройство и методы Stack
Stack в Java наследует класс Vector, что означает, что он использует динамический массив для хранения своих элементов. Это позволяет Stack автоматически изменять свой размер по мере добавления или удаления элементов.
Основные методы Stack
push(E item):
Добавляет элемент на вершину стека.
Возвращает добавленный элемент.
pop():
Удаляет и возвращает элемент с вершины стека.
Бросает EmptyStackException, если стек пуст.
peek():
Возвращает элемент с вершины стека без его удаления.
Бросает EmptyStackException, если стек пуст.
isEmpty():
Проверяет, пуст ли стек.
Возвращает true, если стек пуст, и false в противном случае.
search(Object o):
Ищет элемент в стеке и возвращает его позицию относительно вершины.
Возвращает -1, если элемент не найден.
#Java #Training #Medium #Stack
Stack в Java наследует класс Vector, что означает, что он использует динамический массив для хранения своих элементов. Это позволяет Stack автоматически изменять свой размер по мере добавления или удаления элементов.
public class Stack<E> extends Vector<E> {
public Stack() {
}
public E push(E item) {
addElement(item);
return item;
}
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
public boolean empty() {
return size() == 0;
}
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
}
Основные методы Stack
push(E item):
Добавляет элемент на вершину стека.
Возвращает добавленный элемент.
Stack<Integer> stack = new Stack<>();
stack.push(10); // Добавляет элемент 10 на вершину стека
pop():
Удаляет и возвращает элемент с вершины стека.
Бросает EmptyStackException, если стек пуст.
int element = stack.pop(); // Удаляет и возвращает элемент 10
peek():
Возвращает элемент с вершины стека без его удаления.
Бросает EmptyStackException, если стек пуст.
int topElement = stack.peek(); // Возвращает элемент 10, но не удаляет его
isEmpty():
Проверяет, пуст ли стек.
Возвращает true, если стек пуст, и false в противном случае.
boolean isEmpty = stack.isEmpty(); // Возвращает false, так как стек не пуст
search(Object o):
Ищет элемент в стеке и возвращает его позицию относительно вершины.
Возвращает -1, если элемент не найден.
int position = stack.search(10); // Возвращает 1, так как элемент 10 на вершине стека
#Java #Training #Medium #Stack
PriorityQueue, принципы работы и внутреннее устройство
PriorityQueue — это класс из пакета java.util, который реализует интерфейс Queue. В отличие от обычной очереди (FIFO), PriorityQueue основана на приоритетах элементов. Приоритет определяется с помощью естественного порядка элементов или через предоставленный компаратор.
В этом примере PriorityQueue автоматически упорядочивает элементы, так что при удалении элементов они извлекаются в порядке возрастания: 1, 3, 4.
Принципы работы PriorityQueue
Естественный порядок или компаратор: Элементы могут упорядочиваться на основе их естественного порядка (если элементы реализуют интерфейс Comparable) или на основе компаратора, предоставленного при создании очереди.
Бинарная куча (Binary Heap): Внутренняя реализация PriorityQueue основана на бинарной куче, которая является частично упорядоченным двоичным деревом. Это позволяет эффективно добавлять элементы и извлекать минимальный элемент.
Время выполнения операций: Основные операции PriorityQueue (вставка, удаление минимального элемента) выполняются за логарифмическое время O(log n), где n — количество элементов в очереди.
Внутреннее устройство PriorityQueue
PriorityQueue использует массив для хранения элементов, которые упорядочиваются в соответствии с правилами бинарной кучи. Дочерние элементы имеют более низкий приоритет по сравнению с родительскими элементами.
Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.baeldung.com/java-priorityqueue
https://sky.pro/media/ispolzovanie-priorityqueue-v-java/
#Java #Training #Medium #PriorityQueue
PriorityQueue — это класс из пакета java.util, который реализует интерфейс Queue. В отличие от обычной очереди (FIFO), PriorityQueue основана на приоритетах элементов. Приоритет определяется с помощью естественного порядка элементов или через предоставленный компаратор.
import java.util.PriorityQueue;
public class PriorityQueueExample {
public static void main(String[] args) {
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
priorityQueue.add(4);
priorityQueue.add(1);
priorityQueue.add(3);
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll());
}
}
}
В этом примере PriorityQueue автоматически упорядочивает элементы, так что при удалении элементов они извлекаются в порядке возрастания: 1, 3, 4.
Принципы работы PriorityQueue
Естественный порядок или компаратор: Элементы могут упорядочиваться на основе их естественного порядка (если элементы реализуют интерфейс Comparable) или на основе компаратора, предоставленного при создании очереди.
Бинарная куча (Binary Heap): Внутренняя реализация PriorityQueue основана на бинарной куче, которая является частично упорядоченным двоичным деревом. Это позволяет эффективно добавлять элементы и извлекать минимальный элемент.
Время выполнения операций: Основные операции PriorityQueue (вставка, удаление минимального элемента) выполняются за логарифмическое время O(log n), где n — количество элементов в очереди.
Внутреннее устройство PriorityQueue
PriorityQueue использует массив для хранения элементов, которые упорядочиваются в соответствии с правилами бинарной кучи. Дочерние элементы имеют более низкий приоритет по сравнению с родительскими элементами.
public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable {
private static final int DEFAULT_INITIAL_CAPACITY = 11;
private Object[] queue;
private int size;
private final Comparator<? super E> comparator;
public PriorityQueue() {
this(DEFAULT_INITIAL_CAPACITY, null);
}
public PriorityQueue(int initialCapacity) {
this(initialCapacity, null);
}
public PriorityQueue(int initialCapacity, Comparator<? super E> comparator) {
if (initialCapacity < 1)
throw new IllegalArgumentException();
this.queue = new Object[initialCapacity];
this.comparator = comparator;
}
// Основные методы: add, poll, offer, remove, etc.
}
Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.baeldung.com/java-priorityqueue
https://sky.pro/media/ispolzovanie-priorityqueue-v-java/
#Java #Training #Medium #PriorityQueue
Baeldung
Guide to Java PriorityQueue | Baeldung
A quick and practical guide to Java's PriorityQueue.
Что выведет код?
#Tasks
import java.util.PriorityQueue;
public class PriorityQueueChallenge {
public static void main(String[] args) {
PriorityQueue<String> pq = new PriorityQueue<>();
pq.add("apple");
pq.add("banana");
pq.add("cherry");
pq.add("date");
pq.add("elderberry");
StringBuilder result = new StringBuilder();
while (!pq.isEmpty()) {
String value = pq.poll();
if (value.length() % 2 == 0) {
pq.add(value.substring(1));
} else {
result.append(value.charAt(0));
}
}
System.out.println("Result: " + result);
}
}
#Tasks
Завтра в 17:00 по МСК, приглашаем всех на онлайн решение задач с Сodewars!
Решать задачи для Вас и вместе с Вами, будет @Alexander_Gors , за что ему сердечное спасибо! 🤝
Приходите и прокачивайте свои знания!
Ждем всех!
Решать задачи для Вас и вместе с Вами, будет @Alexander_Gors , за что ему сердечное спасибо! 🤝
Приходите и прокачивайте свои знания!
Ждем всех!
Основные методы PriorityQueue и примеры использования
add(E e):
Добавляет элемент в очередь. Если элемент null, выбрасывает NullPointerException.
offer(E e):
Добавляет элемент в очередь. Возвращает true, если элемент был успешно добавлен, и false в противном случае.
poll():
Возвращает и удаляет элемент с наивысшим приоритетом (минимальный элемент). Возвращает null, если очередь пуста.
peek():
Возвращает элемент с наивысшим приоритетом, но не удаляет его. Возвращает null, если очередь пуста.
remove(Object o):
Удаляет указанный элемент из очереди, если он присутствует. Возвращает true, если элемент был успешно удален, и false в противном случае.
contains(Object o):
Проверяет, присутствует ли указанный элемент в очереди. Возвращает true, если элемент найден, и false в противном случае.
size():
Возвращает количество элементов в очереди.
Примеры использования
Реализация задачи с приоритетом:
Использование с Comparator для обратного порядка:
Модель с приоритетом задач на основе времени выполнения:
#Java #Training #Medium #PriorityQueue
add(E e):
Добавляет элемент в очередь. Если элемент null, выбрасывает NullPointerException.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(10);
pq.add(20);
pq.add(15);
offer(E e):
Добавляет элемент в очередь. Возвращает true, если элемент был успешно добавлен, и false в противном случае.
pq.offer(5);
poll():
Возвращает и удаляет элемент с наивысшим приоритетом (минимальный элемент). Возвращает null, если очередь пуста.
Integer top = pq.poll(); // Возвращает 5 и удаляет его из очереди
peek():
Возвращает элемент с наивысшим приоритетом, но не удаляет его. Возвращает null, если очередь пуста.
Integer top = pq.peek(); // Возвращает 10, но не удаляет его
remove(Object o):
Удаляет указанный элемент из очереди, если он присутствует. Возвращает true, если элемент был успешно удален, и false в противном случае.
boolean removed = pq.remove(15); // Удаляет элемент 15
contains(Object o):
Проверяет, присутствует ли указанный элемент в очереди. Возвращает true, если элемент найден, и false в противном случае.
boolean contains = pq.contains(20); // Проверяет наличие элемента 20
size():
Возвращает количество элементов в очереди.
int size = pq.size(); // Возвращает количество элементов в очереди
Примеры использования
Реализация задачи с приоритетом:
import java.util.PriorityQueue;
import java.util.Comparator;
class Task {
private String name;
private int priority;
public Task(String name, int priority) {
this.name = name;
this.priority = priority;
}
public int getPriority() {
return priority;
}
@Override
public String toString() {
return name + ": " + priority;
}
}
class TaskComparator implements Comparator<Task> {
public int compare(Task t1, Task t2) {
return Integer.compare(t1.getPriority(), t2.getPriority());
}
}
public class TaskScheduler {
public static void main(String[] args) {
PriorityQueue<Task> taskQueue = new PriorityQueue<>(new TaskComparator());
taskQueue.add(new Task("Task 1", 2));
taskQueue.add(new Task("Task 2", 1));
taskQueue.add(new Task("Task 3", 3));
while (!taskQueue.isEmpty()) {
System.out.println(taskQueue.poll());
}
}
}
Использование с Comparator для обратного порядка:
PriorityQueue<Integer> reversePQ = new PriorityQueue<>(Comparator.reverseOrder());
reversePQ.add(10);
reversePQ.add(20);
reversePQ.add(15);
while (!reversePQ.isEmpty()) {
System.out.println(reversePQ.poll());
}
Модель с приоритетом задач на основе времени выполнения:
import java.util.PriorityQueue;
class Job implements Comparable<Job> {
private String jobName;
private int executionTime;
public Job(String jobName, int executionTime) {
this.jobName = jobName;
this.executionTime = executionTime;
}
@Override
public int compareTo(Job other) {
return Integer.compare(this.executionTime, other.executionTime);
}
@Override
public String toString() {
return jobName + ": " + executionTime;
}
}
public class JobScheduler {
public static void main(String[] args) {
PriorityQueue<Job> jobQueue = new PriorityQueue<>();
jobQueue.add(new Job("Job 1", 30));
jobQueue.add(new Job("Job 2", 10));
jobQueue.add(new Job("Job 3", 20));
while (!jobQueue.isEmpty()) {
System.out.println(jobQueue.poll());
}
}
}
#Java #Training #Medium #PriorityQueue