При обходе списка через ListIterator требуется заменить текущий элемент. Какая семантика операции set позволяет сделать это без структурного изменения списка?
База Hintsage
Коллекции
Java Collections Framework, контракты, реализации и сложность операций.
Практика
Вопросы: Коллекции
Как устроен итератор ConcurrentHashMap так, что он допускает параллельные изменения карты без ConcurrentModificationException?
Нужно удалить из списка все строки, начинающиеся с tmp, не ухудшая производительность при большом числе совпадений. Какой механизм реализации определяет сложность removeIf в этом коде?
import java.util.ArrayList;
import java.util.List;
List<String> files = new ArrayList<>();
for (int i = 0; i < 100_000; i++) {
files.add(i % 2 == 0 ? "tmp-" + i : "data-" + i);
}
files.removeIf(name -> name.startsWith("tmp-"));
На проекте нужен ограниченный LRU-кэш на стандартных коллекциях Java. Какой механизм LinkedHashMap позволяет автоматически удалять наименее недавно использованную запись?
При обработке записей через представление entrySet изменение объекта Map.Entry меняет исходную карту. Какой контракт представления объясняет это поведение?
Разберите, почему в этом коде peek работает быстрее poll, хотя обе операции обращаются к минимальному элементу очереди:
import java.util.PriorityQueue;
PriorityQueue<Integer> queue = new PriorityQueue<>();
queue.add(7);
queue.add(2);
queue.add(5);
System.out.println(queue.peek());
System.out.println(queue.poll());
Как трактовать результат size() у ConcurrentHashMap во время одновременных изменений?
Вызов фабрики Set.of завершается исключением из-за повторяющегося элемента, хотя повторная вставка в обычный Set обычно не меняет его состояние. Какой контракт фабричного метода объясняет это различие?
В следующем коде проверка contains не зависит от количества элементов в наборе. Какое внутреннее представление EnumSet объясняет такую сложность?
import java.time.DayOfWeek;
import java.util.EnumSet;
import java.util.Set;
class Demo {
public static void main(String[] args) {
Set<DayOfWeek> workdays = EnumSet.of(
DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.FRIDAY);
System.out.println(workdays.contains(DayOfWeek.TUESDAY));
}
}
В коде ниже после изменения первого элемента меняются все позиции списка. Какой механизм это объясняет?
import java.util.*;
public class Main {
public static void main(String[] args) {
List<StringBuilder> values = new ArrayList<>(
Collections.nCopies(3, new StringBuilder("A")));
values.get(0).append("!");
System.out.println(values);
}
}
Из-за какого контракта список, созданный через Arrays.asList, принимает замену элемента, но отклоняет добавление и удаление?
При множестве читателей и редких изменениях почему CopyOnWriteArrayList делает добавление элемента линейным по размеру списка?
В чём практическая ловушка значения, возвращаемого Map.put, если карта допускает null?
При выборе методов Deque для обработки пустой очереди какое различие между remove и poll определяет безопасное поведение?
Рассмотрим многопоточный кэш на ConcurrentHashMap: несколько потоков одновременно запрашивают отсутствующее значение. Какой механизм computeIfAbsent не допускает повторной успешной инициализации одного ключа?
Когда выбор ArrayDeque вместо LinkedList действительно меняет характеристики очереди?
Разберите, почему сложность removeAll у ArrayList может радикально зависеть от типа переданной коллекции.
При частых удалениях из ArrayList почему вызов trimToSize после каждой операции может ухудшить производительность?
В кэше на WeakHashMap запись исчезает после того, как ключ больше нигде не используется. Какой механизм реализации объясняет это поведение?
От чего зависит сложность полной итерации по HashMap, если число записей невелико относительно ёмкости таблицы?
Показано 1–20 из 50