我正在寻找一种实现或方法来创建在迭代中重复的可变(具有频繁更新)、排序、队列或列表。一个例子是 [1, 3, 4, 9],其中 next() 循环遍历元素,并在 9 之后返回 1。元素经常被删除和添加,需要正确排序。
我最初的计划是使用 LinkedList 或 PriorityQueue,但问题越来越多。我需要对队列进行排序(最好是在更新时而不是在迭代时),因此使用 PriorityQueue,但我还需要队列在迭代时重复(手动完成,而不是循环)。我考虑制作一个包含比较器并包装迭代器的类,它看起来有点像这样
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),因为我完全被难住了。
蓝山帝景
相关分类