База Hintsage

Коллекции

Java Collections Framework, контракты, реализации и сложность операций.

Практика

Вопросы: Коллекции

Нужно удалить из списка все строки, начинающиеся с 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-"));

Разберите, почему в этом коде 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());
Программирование JavaКоллекцииJava-разработчик серверной части

В следующем коде проверка 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));
    }
}
Программирование JavaКоллекцииJava-разработчик серверных приложений

В коде ниже после изменения первого элемента меняются все позиции списка. Какой механизм это объясняет?

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);
    }
}

Показано 120 из 50