gpt4 book ai didi

java - 为什么 Java Collections.asLifoQueue 不是 LIFO?

转载 作者:行者123 更新时间:2023-12-02 13:40:45 25 4
gpt4 key购买 nike

请参阅下面的代码片段:

public class test1 {
public static void main(String args[]) {
Deque<String> dq = new ArrayDeque<String>(5);
dq.add("java");
dq.add("c");
dq.add("c++");
dq.add("unix");
dq.add("perl");
Queue<String> q = Collections.asLifoQueue(dq);
System.out.println("returned queue is: "+q.toString());
}
}

输出:

returned queue is: [java, c, c++, unix, perl]

输出不应该如下所示吗?:

[perl, unix, c++, c, java] 

最佳答案

HereasLifoQueue 的 javadoc。内容是这样的:

Returns a view of a Deque as a Last-in-first-out (Lifo) Queue. Method add is mapped to push, remove is mapped to pop and so on. This view can be useful when you would like to use a method requiring a Queue but you need Lifo ordering.

因此,它为您提供了现有队列的 LIFO View ,这意味着现有队列保持原样,但新方法调用遵循 LIFO 标准。

现在,在您的示例中,如果我再次调用 add,在获取 LIFO 队列后,它会被转换为 push,因此,元素被添加到顶部,例如:

public static void main(String[] args) throws Exception{
Deque<String> dq = new ArrayDeque<String>(5);
dq.add("java");
dq.add("c");
dq.add("c++");
dq.add("unix");
dq.add("perl");
Queue<String> q = Collections.asLifoQueue(dq);
q.add("test");
while(!q.isEmpty()){
System.out.println(q.remove());
}
}

当上面的代码执行时,它首先打印“test”。

关于java - 为什么 Java Collections.asLifoQueue 不是 LIFO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42750309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com