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有选项二,这让我的生活变得简单多了:谢谢。