Java for Beginner
745 subscribers
727 photos
205 videos
12 files
1.19K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Пример кода для PriorityQueue:
javaimport java.util.PriorityQueue;
import java.util.Queue;

public class Main {
public static void main(String[] args) {
Queue<Integer> queue = new PriorityQueue<>();
queue.offer(3);
queue.offer(1);
queue.offer(2);
System.out.println(queue); // [1, 3, 2] — min в начале, но итерация не sorted

System.out.println(queue.peek()); // 1 (минимальный)
System.out.println(queue.poll()); // 1
System.out.println(queue); // [2, 3]

// Max-heap с Comparator
Queue<Integer> maxQueue = new PriorityQueue<>((a, b) -> b - a);
maxQueue.offer(3);
maxQueue.offer(1);
maxQueue.offer(2);
System.out.println(maxQueue.poll()); // 3 (максимальный)

// queue.offer(null); // NPE
}
}

Вывод: Элементы извлекаются по приоритету, не по порядку добавления.


Применение очередей: Обработка задач, хранение заявок

Очереди идеальны для сценариев последовательной обработки.

Обработка задач (Task Processing):
Пример: Планировщик задач, где задачи добавляются в очередь и обрабатываются по порядку (FIFO с LinkedList) или по приоритету (PriorityQueue).
Нюанс: В многопоточных системах (например, Thread pool) используйте BlockingQueue для безопасного poll.


Пример кода (простой обработчик):
javaimport java.util.LinkedList;
import java.util.Queue;

public class TaskProcessor {
private Queue<String> tasks = new LinkedList<>();

public void addTask(String task) {
tasks.offer(task);
}

public void processTasks() {
while (!tasks.isEmpty()) {
String task = tasks.poll();
System.out.println("Обработка: " + task);
}
}
}

public class Main {
public static void main(String[] args) {
TaskProcessor processor = new TaskProcessor();
processor.addTask("Задача 1");
processor.addTask("Задача 2");
processor.processTasks(); // Обработка: Задача 1\nОбработка: Задача 2
}
}

Вывод: Задачи обрабатываются FIFO.


Хранение заявок (Request Storage):
Пример: Сервер хранит входящие заявки в очередь для последовательной обработки (например, HTTP requests).
С PriorityQueue: Заявки по срочности (high-priority first).
Нюанс: Для реальных систем используйте BlockingQueue (offer/poll с блокировкой при пустой/полной).


Пример кода (приоритетные заявки):
javaimport java.util.PriorityQueue;
import java.util.Queue;

class Request implements Comparable<Request> {
private String name;
private int priority; // 1 - высокий, 10 - низкий

public Request(String name, int priority) {
this.name = name;
this.priority = priority;
}

@Override
public int compareTo(Request other) {
return Integer.compare(this.priority, other.priority); // Min-heap по приоритету
}

public String getName() {
return name;
}
}

public class Main {
public static void main(String[] args) {
Queue<Request> requests = new PriorityQueue<>();
requests.offer(new Request("Заявка A", 5));
requests.offer(new Request("Заявка B", 1)); // Высокий приоритет
requests.offer(new Request("Заявка C", 3));

while (!requests.isEmpty()) {
System.out.println("Обработка: " + requests.poll().getName()); // Заявка B, Заявка C, Заявка A
}
}
}

Вывод: Заявки обрабатываются по приоритету.


Полезные советы для новичков

LinkedList для простоты: Универсальна для FIFO, легко добавить Deque-функции.
PriorityQueue для приоритетов: Передавайте Comparator для custom порядка (например, max-heap).
Custom классы: Реализуйте Comparable для PriorityQueue, или используйте Comparator.
Пустая очередь: Проверяйте isEmpty() перед poll, или используйте null от poll.
Итерация: For-each для просмотра, но не модифицируйте.



#Java #для_новичков #beginner #Collections #PriorityQueue #LinkedList
👍1
Что выведет код?

import java.util.PriorityQueue;

public class Task211025 {
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(2);
pq.offer(8);
pq.offer(1);

System.out.print(pq.poll() + " ");
System.out.print(pq.poll() + " ");

pq.offer(0);
pq.offer(3);

System.out.print(pq.poll() + " ");
System.out.print(pq.poll() + " ");
System.out.print(pq.poll());
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
33%
1 2 3 0 5
33%
1 2 0 3 8
33%
1 2 0 3 5
0%
1 2 3 5 8
Вопрос с собеседований

Чем отличаются intermediate и terminal операции в Stream API? 🤓


Ответ:

Intermediate операции
(map, filter, sorted) возвращают новый Stream и выполняются лениво.

Terminal операции (collect, forEach, reduce) запускают обработку и возвращают результат.

Без terminal операций Stream не выполняется.



#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1