Я ищу реализацию или метод создания изменяемого (с частыми обновлениями), отсортированного, очереди или списка, который повторяется в итерации.Примером может быть что-то [1, 3, 4, 9], где next () циклически перебирает элементы и возвращает обратно к 1 после 9. Элементы часто удаляются и добавляются, и их необходимо правильно отсортировать.
Первоначально я планировал использовать LinkedList или PriorityQueue, но проблемы росли.Мне нужно, чтобы очередь сортировалась (желательно при обновлении, а не итерации), следовательно, с использованием PriorityQueue, но мне также нужно, чтобы очередь повторялась при итерации (выполняется вручную, а не с помощью цикла).Я подумал о создании класса, который содержал бы Comparator и упаковывал Iterator, который выглядел примерно так:
public class SortedRepeatingQueue<T> extends LinkedList<T> {
private final Comparator<T> comparator;
private Iterator<T> iterator = iterator();
public SortedRepeatingQueue(Comparator<T> comparator) {
this.comparator = comparator;
}
public T next() {
Collections.sort(this, comparator);
if (!iterator.hasNext()) {
iterator = iterator();
}
return iterator.next();
}
}
Однако это могло бы создать проблемы, если запись была удалена или добавлена во время итерации, как это сделал бы кэшированный Iterator.не будет обновляться, и для его обновления потребуется немало усилий, чтобы мы продолжили работу с тем же индексом.Например, если бы мы перебирали [1,2,3,5], находились в 3, а затем вставляли 4, обновление итератора, чтобы удостовериться, что next () вернул 4 вместо 5, было бы сложно.Другим вариантом было простое расширение List, где next () берет первый элемент, возвращает его, а затем перемещает его назад (например, [1,3,4,5] .next () возвращает 1 и создает [3,4,5,1]).Однако это будет отменено любой сортировкой, сделанной в списке.Я также рассмотрел полностью пользовательскую реализацию, но я не очень доверяю себе, чтобы создать безопасную, полностью работающую реализацию этого, и это заняло бы довольно много времени.
Я ищу любой метод обработкиэто быстро (хотя скорость не является основным приоритетом, так как n никогда не должно быть больше 20-30), потому что я полностью в замешательстве.
Спасибо за любую помощь.