Оптимизированные паттерны использования
Эффективное использование для ArrayList
Эффективное использование для LinkedList
#Java #для_новичков #beginner #ListIterator
Эффективное использование для ArrayList
public class ArrayListOptimizations {
// Избегайте частых add() и remove() в середине списка
public static void efficientArrayListProcessing(List<String> list) {
// Вместо множественных add() через ListIterator
// Собирайте изменения и применяйте их пакетно
List<String> toAdd = new ArrayList<>();
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
String current = iterator.next();
if (shouldDuplicate(current)) {
toAdd.add(current + "_copy");
}
}
// Пакетное добавление в конец
list.addAll(toAdd);
}
// Используйте set() вместо remove() + add() для замены
public static void replaceEfficiently(List<Integer> numbers) {
ListIterator<Integer> iterator = numbers.listIterator();
while (iterator.hasNext()) {
Integer current = iterator.next();
if (current % 2 == 0) {
iterator.set(current * 2); // Эффективнее, чем remove() + add()
}
}
}
}Эффективное использование для LinkedList
public class LinkedListOptimizations {
// LinkedList идеально подходит для частых вставок/удалений через ListIterator
public static void efficientLinkedListProcessing(LinkedList<String> list) {
ListIterator<String> iterator = list.listIterator();
// Частые вставки эффективны
while (iterator.hasNext()) {
String current = iterator.next();
if (requiresPrefix(current)) {
iterator.add("prefix_" + current);
}
}
// Частые удаления также эффективны
iterator = list.listIterator();
while (iterator.hasNext()) {
if (shouldRemove(iterator.next())) {
iterator.remove();
}
}
}
// Использование previous() для навигации назад
public static void findAndProcessFromEnd(LinkedList<String> list, String target) {
ListIterator<String> iterator = list.listIterator(list.size());
while (iterator.hasPrevious()) {
String current = iterator.previous();
if (current.equals(target)) {
// Нашли - обрабатываем и можем идти в обе стороны
processFound(current);
// Можем продолжить в любом направлении
if (iterator.hasPrevious()) {
processPrevious(iterator.previous());
}
if (iterator.hasNext()) {
processNext(iterator.next());
}
break;
}
}
}
}#Java #для_новичков #beginner #ListIterator
👍2
Best Practices
1. Выбор начальной позиции
2. Минимизация переходов между next() и previous()
3. Использование nextIndex()/previousIndex() для логики, зависящей от позиции
4. Безопасность в многопоточных сценариях
#Java #для_новичков #beginner #ListIterator
1. Выбор начальной позиции
// Начинайте с нужной позиции, а не всегда с начала
ListIterator<T> iterator = list.listIterator(startPosition);
// Для обработки с конца
ListIterator<T> reverseIterator = list.listIterator(list.size());
2. Минимизация переходов между next() и previous()
// Неэффективно:
while (iterator.hasNext()) {
T current = iterator.next();
if (condition(current)) {
iterator.previous(); // Дорогой переход
iterator.add(newElement);
iterator.next(); // Еще один переход
iterator.next(); // Пропускаем добавленный элемент
}
}
// Более эффективно:
while (iterator.hasNext()) {
T current = iterator.next();
if (condition(current)) {
iterator.add(newElement);
// current остался тем же, newElement теперь перед ним
}
}
3. Использование nextIndex()/previousIndex() для логики, зависящей от позиции
ListIterator<T> iterator = list.listIterator();
while (iterator.hasNext()) {
int currentIndex = iterator.nextIndex();
T element = iterator.next();
if (currentIndex % 2 == 0) {
// Обработка четных позиций
processEven(element, currentIndex);
}
}
4. Безопасность в многопоточных сценариях
// Всегда синхронизируйте доступ к ListIterator
synchronized(list) {
ListIterator<T> iterator = list.listIterator();
while (iterator.hasNext()) {
// Обработка
}
}
// Или используйте потокобезопасные альтернативы
List<T> syncList = Collections.synchronizedList(new ArrayList<>());
// Но даже synchronizedList требует внешней синхронизации для итерации
#Java #для_новичков #beginner #ListIterator
👍2
Что выведет код?
#Tasks
import java.util.*;
public class Task121225 {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
ListIterator<String> it = list.listIterator();
System.out.print(it.next() + " ");
System.out.print(it.next() + " ");
it.add("X");
System.out.print(it.previous() + " ");
System.out.print(it.next() + " ");
System.out.print(it.previous() + " ");
it.remove();
System.out.println(list);
}
}
#Tasks
👍1
Варианты ответа:
Anonymous Quiz
38%
A B X C X [A, B, C, D]
38%
A B X X X [A, B, X, C, D]
25%
A B X X [A, B, C, D]
0%
A B X X [A, B, X, C, D]
👍1
Вопрос с собеседований
Как работает ReentrantReadWriteLock?🤓
Ответ:
Он разделяет блокировки на read и write.
Несколько читателей могут работать одновременно, но запись блокируется полностью. Это повышает производительность, если чтений больше, чем записей.
Однако write-блокировка может вызывать «голодание» читателей.
#собеседование
Как работает ReentrantReadWriteLock?
Ответ:
Несколько читателей могут работать одновременно, но запись блокируется полностью. Это повышает производительность, если чтений больше, чем записей.
Однако write-блокировка может вызывать «голодание» читателей.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
История IT-технологий сегодня — 13 декабря
ℹ️ Кто родился в этот день
Дже́йми Ве́рнер Зави́нски (англ. Jamie Werner Zawinski, известный также как jwz; род. 3 ноября 1968, Питтсбург, Пенсильвания) — программист, один из ключевых разработчиков Netscape и Mozilla; активно повлиял на развитие ранних браузеров и веб-экосистемы.
🌐 Знаковые события
1967 — в США состоялся успешный запуск космического аппарата «Пионер-8».
#Biography #Birth_Date #Events #13Декабря
Дже́йми Ве́рнер Зави́нски (англ. Jamie Werner Zawinski, известный также как jwz; род. 3 ноября 1968, Питтсбург, Пенсильвания) — программист, один из ключевых разработчиков Netscape и Mozilla; активно повлиял на развитие ранних браузеров и веб-экосистемы.
1967 — в США состоялся успешный запуск космического аппарата «Пионер-8».
#Biography #Birth_Date #Events #13Декабря
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
С 06.12 по 12.12
Предыдущий пост(с С 29.11 по 05.12)
Воскресный мотивационный пост:
Не было мотивации
Запись встреч/видео:
не было
Обучающие статьи:
Java:
Коллекции в Java
Глава 2. List — списки в Java
Практика
Глава 6. Итераторы
Интерфейс Iterator — фундаментальный механизм обхода коллекций
Интерфейс ListIterator — двунаправленный обход и расширенные возможности
Spring Cloud Gateway
Конфигурация маршрутов в Spring Cloud Gateway
Predicates (условия маршрутизации)
Полезные статьи и видео:
ПОДКЛЮЧЕНИЕ GPT GO на ГОД!
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
Предыдущий пост(с С 29.11 по 05.12)
Воскресный мотивационный пост:
Не было мотивации
Запись встреч/видео:
не было
Обучающие статьи:
Java:
Коллекции в Java
Глава 2. List — списки в Java
Практика
Глава 6. Итераторы
Интерфейс Iterator — фундаментальный механизм обхода коллекций
Интерфейс ListIterator — двунаправленный обход и расширенные возможности
Spring Cloud Gateway
Конфигурация маршрутов в Spring Cloud Gateway
Predicates (условия маршрутизации)
Полезные статьи и видео:
ПОДКЛЮЧЕНИЕ GPT GO на ГОД!
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
👍1
Ну что встречаемся завтра?
Можно что-то новое рассмотреть, если желание есть😜
Предлагайте👍
Можно что-то новое рассмотреть, если желание есть
Предлагайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
История IT-технологий сегодня — 14 декабря
ℹ️ Кто родился в этот день
Никола́й Генна́диевич Ба́сов (14 декабря 1922, Усмань, Тамбовская губерния, РСФСР — 1 июля 2001, Москва) — советский и российский физик, лауреат Нобелевской премии по физике (1964), Ленинской премии (1959) и Государственной премии СССР (1989). Дважды Герой Социалистического Труда (1969, 1982). Внёс значительный вклад в развитие квантовой электроники и создание лазерных установок.
🌐 Знаковые события
1977 — введена в эксплуатацию одна из первых коммерческих линий связи на основе оптоволокна в США.
#Biography #Birth_Date #Events #14Декабря
Никола́й Генна́диевич Ба́сов (14 декабря 1922, Усмань, Тамбовская губерния, РСФСР — 1 июля 2001, Москва) — советский и российский физик, лауреат Нобелевской премии по физике (1964), Ленинской премии (1959) и Государственной премии СССР (1989). Дважды Герой Социалистического Труда (1969, 1982). Внёс значительный вклад в развитие квантовой электроники и создание лазерных установок.
1977 — введена в эксплуатацию одна из первых коммерческих линий связи на основе оптоволокна в США.
#Biography #Birth_Date #Events #14Декабря
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2