Что выведет код?
#Tasks
import java.util.ArrayDeque;
public class ArrayDequeChallenge {
public static void main(String[] args) {
ArrayDeque<Integer> deque = new ArrayDeque<>();
for (int i = 0; i < 10; i++) {
deque.add(i);
}
while (deque.size() > 1) {
deque.removeFirst();
if (deque.size() > 1) {
deque.addLast(deque.removeFirst() + deque.removeLast());
}
}
System.out.println("Result: " + deque.peek());
}
}
#Tasks
Внимание!
На гитхабе (возможно, где-то еще) стали появляться поддельные версии goodbyedpi.exe с вирусом.
Тот архив с паролем, имейте ввиду. Поддельный goodbyedpi.exe значительно большего веса (в 40+ раз). Оригинальный ~100 КБ, поддельный > 4 МБ.
Благодаря сообществу ntc.party удалено уже 4 репозитория на гитхабе с поддельным goodbyedpi.exe,
но почти наверняка эти подделки распространились в интернете.
#От_подписчиков
На гитхабе (возможно, где-то еще) стали появляться поддельные версии goodbyedpi.exe с вирусом.
Тот архив с паролем, имейте ввиду. Поддельный goodbyedpi.exe значительно большего веса (в 40+ раз). Оригинальный ~100 КБ, поддельный > 4 МБ.
Благодаря сообществу ntc.party удалено уже 4 репозитория на гитхабе с поддельным goodbyedpi.exe,
но почти наверняка эти подделки распространились в интернете.
#От_подписчиков
Встреча создана! ☝️
Заходите порешать задачки вместе с нами!⭐️
Ждем всех!
https://telemost.yandex.ru/j/42492956505565
Заходите порешать задачки вместе с нами!⭐️
Ждем всех!
https://telemost.yandex.ru/j/42492956505565
Основные методы ArrayDeque и их применение
Основные методы ArrayDeque:
addFirst(E e):
Добавляет элемент в начало очереди. Если очередь заполнена, увеличивает её размер.
addLast(E e):
Добавляет элемент в конец очереди. Если очередь заполнена, увеличивает её размер.
offerFirst(E e):
Предлагает добавить элемент в начало очереди. Возвращает true, если элемент был добавлен успешно.
offerLast(E e):
Предлагает добавить элемент в конец очереди. Возвращает true, если элемент был добавлен успешно.
pollFirst():
Возвращает и удаляет первый элемент из очереди. Возвращает null, если очередь пуста.
pollLast():
Возвращает и удаляет последний элемент из очереди. Возвращает null, если очередь пуста.
peekFirst():
Возвращает первый элемент из очереди, не удаляя его. Возвращает null, если очередь пуста.
peekLast():
Возвращает последний элемент из очереди, не удаляя его. Возвращает null, если очередь пуста.
push(E e):
Вставляет элемент на вершину стека. Эквивалентен методу addFirst(E e).
pop():
Возвращает и удаляет элемент с вершины стека. Эквивалентен методу pollFirst().
Примеры использования ArrayDeque
Реализация стека с использованием ArrayDeque:
Реализация очереди с использованием ArrayDeque:
Реализация двусторонней очереди с использованием ArrayDeque:
#Java #Training #Medium #ArrayDeque
Основные методы ArrayDeque:
addFirst(E e):
Добавляет элемент в начало очереди. Если очередь заполнена, увеличивает её размер.
ArrayDeque<Integer> deque = new ArrayDeque<>();
deque.addFirst(10);
deque.addFirst(20);
System.out.println(deque); // [20, 10]
addLast(E e):
Добавляет элемент в конец очереди. Если очередь заполнена, увеличивает её размер.
deque.addLast(30);
System.out.println(deque); // [20, 10, 30]
offerFirst(E e):
Предлагает добавить элемент в начало очереди. Возвращает true, если элемент был добавлен успешно.
deque.offerFirst(40);
System.out.println(deque); // [40, 20, 10, 30]
offerLast(E e):
Предлагает добавить элемент в конец очереди. Возвращает true, если элемент был добавлен успешно.
deque.offerLast(50);
System.out.println(deque); // [40, 20, 10, 30, 50]
pollFirst():
Возвращает и удаляет первый элемент из очереди. Возвращает null, если очередь пуста.
Integer first = deque.pollFirst();
System.out.println(first); // 40
System.out.println(deque); // [20, 10, 30, 50]
pollLast():
Возвращает и удаляет последний элемент из очереди. Возвращает null, если очередь пуста.
Integer last = deque.pollLast();
System.out.println(last); // 50
System.out.println(deque); // [20, 10, 30]
peekFirst():
Возвращает первый элемент из очереди, не удаляя его. Возвращает null, если очередь пуста.
Integer peekFirst = deque.peekFirst();
System.out.println(peekFirst); // 20
peekLast():
Возвращает последний элемент из очереди, не удаляя его. Возвращает null, если очередь пуста.
Integer peekLast = deque.peekLast();
System.out.println(peekLast); // 30
push(E e):
Вставляет элемент на вершину стека. Эквивалентен методу addFirst(E e).
deque.push(60);
System.out.println(deque); // [60, 20, 10, 30]
pop():
Возвращает и удаляет элемент с вершины стека. Эквивалентен методу pollFirst().
Integer pop = deque.pop();
System.out.println(pop); // 60
System.out.println(deque); // [20, 10, 30]
Примеры использования ArrayDeque
Реализация стека с использованием ArrayDeque:
import java.util.ArrayDeque;
public class StackExample {
public static void main(String[] args) {
ArrayDeque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.push(2);
stack.push(3);
while (!stack.isEmpty()) {
System.out.println(stack.pop());
}
}
}
Реализация очереди с использованием ArrayDeque:
import java.util.ArrayDeque;
public class QueueExample {
public static void main(String[] args) {
ArrayDeque<Integer> queue = new ArrayDeque<>();
queue.addLast(1);
queue.addLast(2);
queue.addLast(3);
while (!queue.isEmpty()) {
System.out.println(queue.pollFirst());
}
}
}
Реализация двусторонней очереди с использованием ArrayDeque:
import java.util.ArrayDeque;
public class DequeExample {
public static void main(String[] args) {
ArrayDeque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1);
deque.addLast(2);
deque.addFirst(3);
deque.addLast(4);
while (!deque.isEmpty()) {
System.out.println(deque.pollFirst());
}
}
}
#Java #Training #Medium #ArrayDeque
Вчера мы провели трансляцию в канале по решению задач с Codewar. Устраивает ли вас такой формат, нужно ли делать запись, для пересмотра?
Anonymous Poll
17%
Да, все ок, записывать не надо.
67%
Да все ок, но запись обязательно нужна, я хочу пересмотреть!
6%
Да решение задач нужно, но запись из трансляции в тг будет низкого качества(
11%
Мне не очень нравится/удобно участвовать в таких собраниях, лучше запись, я ее потом посмотрю.
0%
Я и без вас решу все задачи))
0%
Как я оказался в этом канале???
Java for Beginner pinned «Вчера мы провели трансляцию в канале по решению задач с Codewar. Устраивает ли вас такой формат, нужно ли делать запись, для пересмотра?»
LinkedBlockingQueue, отличия от других очередей.
LinkedBlockingQueue — это реализация блокирующей очереди на основе связанного списка, предоставляемая в пакете java.util.concurrent. Она поддерживает опциональную ограниченную емкость и используется для передачи данных между потоками с возможностью блокировки.
Основные отличия от других очередей:
Блокирующая очередь: Ожидает свободного места для добавления или доступного элемента для извлечения.
Основана на связанном списке: В отличие от ArrayBlockingQueue, которая использует массив, LinkedBlockingQueue использует связанный список.
Опциональная ограниченная емкость: Вы можете задать максимальную емкость очереди. По умолчанию емкость не ограничена.
Внутреннее устройство
LinkedBlockingQueue реализует блокирующую очередь с использованием двух внутренних объектов Node, а также использует механизмы блокировок для управления доступом к очереди.
Основные компоненты:
Внутренний класс Node:
Узел, содержащий данные и ссылку на следующий элемент в очереди.
Голова и хвост очереди:
head: Ссылка на первый узел в очереди.
last: Ссылка на последний узел в очереди.
Механизмы блокировки:
Две раздельные блокировки для вставки и удаления: putLock и takeLock.
Принцип работы:
Вставка элемента (put):
Захватывается блокировка putLock.
Проверяется, не превышает ли очередь максимальную емкость.
Создается новый узел и добавляется в конец очереди.
Если очередь была пустой, сигнализируется о наличии новых элементов (notEmpty.signal()).
Освобождается блокировка putLock.
Извлечение элемента (take):
Захватывается блокировка takeLock.
Проверяется, не пустая ли очередь.
Удаляется узел из начала очереди.
Если очередь была заполнена, сигнализируется о наличии свободного места (notFull.signal()).
Освобождается блокировка takeLock.
Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.geeksforgeeks.org/linkedblockingqueue-class-in-java/
https://www.baeldung.com/java-queue-linkedblocking-concurrentlinked
#Java #Training #Medium #LinkedBlockingQueue
LinkedBlockingQueue — это реализация блокирующей очереди на основе связанного списка, предоставляемая в пакете java.util.concurrent. Она поддерживает опциональную ограниченную емкость и используется для передачи данных между потоками с возможностью блокировки.
Основные отличия от других очередей:
Блокирующая очередь: Ожидает свободного места для добавления или доступного элемента для извлечения.
Основана на связанном списке: В отличие от ArrayBlockingQueue, которая использует массив, LinkedBlockingQueue использует связанный список.
Опциональная ограниченная емкость: Вы можете задать максимальную емкость очереди. По умолчанию емкость не ограничена.
import java.util.concurrent.LinkedBlockingQueue;
public class LinkedBlockingQueueExample {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(10);
try {
queue.put(1);
queue.put(2);
System.out.println(queue.take());
System.out.println(queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Внутреннее устройство
LinkedBlockingQueue реализует блокирующую очередь с использованием двух внутренних объектов Node, а также использует механизмы блокировок для управления доступом к очереди.
Основные компоненты:
Внутренний класс Node:
Узел, содержащий данные и ссылку на следующий элемент в очереди.
static class Node<E> {
E item;
Node<E> next;
Node(E x) { item = x; }
}
Голова и хвост очереди:
head: Ссылка на первый узел в очереди.
last: Ссылка на последний узел в очереди.
private transient Node<E> head;
private transient Node<E> last;
Механизмы блокировки:
Две раздельные блокировки для вставки и удаления: putLock и takeLock.
private final ReentrantLock putLock = new ReentrantLock();
private final Condition notFull = putLock.newCondition();
private final ReentrantLock takeLock = new ReentrantLock();
private final Condition notEmpty = takeLock.newCondition();
Принцип работы:
Вставка элемента (put):
Захватывается блокировка putLock.
Проверяется, не превышает ли очередь максимальную емкость.
Создается новый узел и добавляется в конец очереди.
Если очередь была пустой, сигнализируется о наличии новых элементов (notEmpty.signal()).
Освобождается блокировка putLock.
Извлечение элемента (take):
Захватывается блокировка takeLock.
Проверяется, не пустая ли очередь.
Удаляется узел из начала очереди.
Если очередь была заполнена, сигнализируется о наличии свободного места (notFull.signal()).
Освобождается блокировка takeLock.
import java.util.concurrent.LinkedBlockingQueue;
public class LinkedBlockingQueueExample {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(2);
// Вставка элементов
new Thread(() -> {
try {
queue.put(1);
System.out.println("Inserted 1");
queue.put(2);
System.out.println("Inserted 2");
queue.put(3);
System.out.println("Inserted 3");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
// Извлечение элементов
new Thread(() -> {
try {
Thread.sleep(2000);
System.out.println("Removed " + queue.take());
System.out.println("Removed " + queue.take());
System.out.println("Removed " + queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.geeksforgeeks.org/linkedblockingqueue-class-in-java/
https://www.baeldung.com/java-queue-linkedblocking-concurrentlinked
#Java #Training #Medium #LinkedBlockingQueue
GeeksforGeeks
LinkedBlockingQueue Class in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
Что выведет код?
#Tasks
import java.util.concurrent.LinkedBlockingQueue;
public class LinkedBlockingQueueChallenge {
public static void main(String[] args) throws InterruptedException {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
for (int i = 0; i < 10; i++) {
queue.put(i);
}
int result = 0;
while (!queue.isEmpty()) {
result += queue.take();
if (!queue.isEmpty()) {
queue.put(queue.take() * 2);
}
}
System.out.println("Result: " + result);
}
}
#Tasks
Основные методы LinkedBlockingQueue
put(E e):
Вставляет элемент в конец очереди. Если очередь заполнена, блокируется до освобождения места.
take():
Извлекает и удаляет элемент из начала очереди. Если очередь пуста, блокируется до появления элемента.
offer(E e):
Вставляет элемент в конец очереди, если есть свободное место. Возвращает true, если элемент был добавлен, иначе false.
poll():
Извлекает и удаляет элемент из начала очереди. Возвращает null, если очередь пуста.
peek():
Возвращает элемент из начала очереди без его удаления. Возвращает null, если очередь пуста.
remainingCapacity():
Возвращает количество свободных мест в очереди.
drainTo(Collection<? super E> c):
Перемещает все доступные элементы в указанную коллекцию.
clear():
Удаляет все элементы из очереди.
Примеры использования
Производитель-потребитель:
Очередь задач:
#Java #Training #Medium #LinkedBlockingQueue
put(E e):
Вставляет элемент в конец очереди. Если очередь заполнена, блокируется до освобождения места.
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(2);
queue.put(1);
queue.put(2);
take():
Извлекает и удаляет элемент из начала очереди. Если очередь пуста, блокируется до появления элемента.
Integer item = queue.take();
System.out.println(item);
offer(E e):
Вставляет элемент в конец очереди, если есть свободное место. Возвращает true, если элемент был добавлен, иначе false.
boolean added = queue.offer(3);
System.out.println(added); // false, если очередь заполнена
poll():
Извлекает и удаляет элемент из начала очереди. Возвращает null, если очередь пуста.
Integer item = queue.poll();
System.out.println(item);
peek():
Возвращает элемент из начала очереди без его удаления. Возвращает null, если очередь пуста.
Integer item = queue.peek();
System.out.println(item);
remainingCapacity():
Возвращает количество свободных мест в очереди.
int capacity = queue.remainingCapacity();
System.out.println(capacity);
drainTo(Collection<? super E> c):
Перемещает все доступные элементы в указанную коллекцию.
List<Integer> list = new ArrayList<>();
queue.drainTo(list);
System.out.println(list);
clear():
Удаляет все элементы из очереди.
queue.clear();
Примеры использования
Производитель-потребитель:
import java.util.concurrent.LinkedBlockingQueue;
public class ProducerConsumerExample {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(5);
// Производитель
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
queue.put(i);
System.out.println("Produced: " + i);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}).start();
// Потребитель
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
Integer item = queue.take();
System.out.println("Consumed: " + item);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}).start();
}
}
Очередь задач:
import java.util.concurrent.LinkedBlockingQueue;
public class TaskQueueExample {
public static void main(String[] args) {
LinkedBlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<>(10);
// Запуск потока исполнителя задач
new Thread(() -> {
while (true) {
try {
Runnable task = taskQueue.take();
task.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}).start();
// Добавление задач в очередь
taskQueue.offer(() -> System.out.println("Task 1 executed"));
taskQueue.offer(() -> System.out.println("Task 2 executed"));
}
}
#Java #Training #Medium #LinkedBlockingQueue
This media is not supported in your browser
VIEW IN TELEGRAM
Доброе утро!
Напоминаю, что сегодня в 16:00 по МСК, мы вновь встречаемся, чтобы разобрать структурные паттерны проектирования.
Запасайтесь хорошим настроением и печеньками, ждем всех!
🖐
Напоминаю, что сегодня в 16:00 по МСК, мы вновь встречаемся, чтобы разобрать структурные паттерны проектирования.
Запасайтесь хорошим настроением и печеньками, ждем всех!
🖐
Запись нашей сегодняшней встречи -
https://youtu.be/_jnIaJz_mJc
https://rutube.ru/video/506c291cd9b61894b4c99ac8c168e115/
Огромный респект тем кто смог прийти, за участие и подсказки!
@Alexander_Gors отдельное спасибо, за лайф-кодинг!)
Сегодня, мы совместно рассмотрели на примерах структурные паттерны проектирования:
- Адаптер (Adapter)
- Мост(Bridge)
- Компоновщик (Composite)
- Декоратор (Decorator, Wrapper)
- Фасад (Facade)
- Легковес (Flyweight)
- Заместитель (Proxy)
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Гит репозиторий с результатом - https://github.com/Oleborn/PatternsOfCoding
Всем теплой ночи и легкой рабочей недели! 🫡✌️
https://youtu.be/_jnIaJz_mJc
https://rutube.ru/video/506c291cd9b61894b4c99ac8c168e115/
Огромный респект тем кто смог прийти, за участие и подсказки!
@Alexander_Gors отдельное спасибо, за лайф-кодинг!)
Сегодня, мы совместно рассмотрели на примерах структурные паттерны проектирования:
- Адаптер (Adapter)
- Мост(Bridge)
- Компоновщик (Composite)
- Декоратор (Decorator, Wrapper)
- Фасад (Facade)
- Легковес (Flyweight)
- Заместитель (Proxy)
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Гит репозиторий с результатом - https://github.com/Oleborn/PatternsOfCoding
Всем теплой ночи и легкой рабочей недели! 🫡✌️
Встреча_в_Телемосте_11_08_24_20_03_54_—_запись.webm
227 MB
Для тех кто не смог победить блокировку Youtube и не желает заходить в Rutube выкладываю видео тут!
Смотрите на здоровье) 🫡
Но с вас подписка на Youtube и Rutube и делитесь этими видео, буду крайне благодарен!)))
#online_meeting
Смотрите на здоровье) 🫡
#online_meeting