Java如何对队列使用ListIterator?
这是我的原始代码Java如何对队列使用ListIterator?,java,vector,stack,queue,Java,Vector,Stack,Queue,这是我的原始代码 Stack<Character> var = new Stack<Character>(); ... add elements to stack... for(ListIterator<Character> i = var.listIterator(); i.hasNext();){ if(i.next() == '*'){ i.remove(); i.previous(); i.r
Stack<Character> var = new Stack<Character>();
... add elements to stack...
for(ListIterator<Character> i = var.listIterator(); i.hasNext();){
if(i.next() == '*'){
i.remove();
i.previous();
i.remove();
}
}
在这里,我意识到应该使用队列,所以我将第一行改为
Queue<Character> var = new LinkedList<Character>();
但是,我发现集合中没有ListIterator
为什么只有Vector有ListIterator方法?那么,如果我将堆栈更改为队列,是否必须更改for循环中的五行?旧类是a,这就是为什么可以调用
现在,您似乎想使用API,但它没有一个或任何其他类型的迭代器,允许您向后走
所以你有两个选择:
将您的var变量更改为type,因为它同时是a和a,这意味着您得到了两个api
是实现这两者的唯一内置类。
因为您的逻辑只需要向后查看/删除,所以您可以将逻辑更改为向后迭代,而不是当前的向前迭代逻辑,然后后退以删除前一个元素
API是API的扩展,用于使用双端队列。可以使用该方法向后迭代双端队列
的优点是有4个内置实现,为您提供了更多选择:、
如果选择选项2,您的代码如下:
Deque<Character> var = new LinkedList<>();
// add elements to queue
var.addAll(Arrays.asList('A', 'B', '*', 'C', 'D', '*', 'E'));
// remove '*' elements and immediately preceding element
for (Iterator<Character> i = var.descendingIterator(); i.hasNext(); ) {
if (i.next() == '*') {
i.remove();
i.next(); // next() when descending actually means previous queue element
i.remove();
}
}
System.out.println(var); // prints: [A, C, E]
为什么一个集合会有一个ListIterator,除非它是一个列表?我很困惑——一个LinkedList实现了一个具有iterator@ScaryWombat但在编译时,var被视为Queue,但同样,Queue有迭代器方法,而LinkedList有选项二,这让我的生活变得简单多了:谢谢。