cel*_*owm 10 java queue collections fifo
在Java doc中:
[...]例外的是优先级队列,它根据提供的比较器对元素进行排序,或者元素的自然排序,以及对LIFO元素进行排序的LIFO队列(或堆栈)(后进先出)
如何实现java.util.queue使用LIFO而不是FIFO?
Zhe*_*lov 19
您可以使用Collections.asLifoQueue方法将任何Deque用作LIFO队列:
Queue<Integer> arrayLifoQueue = Collections.asLifoQueue(new ArrayDeque<Integer>());
Queue<Integer> linkedListLifoQueue = Collections.asLifoQueue(new LinkedList<Integer>());
Run Code Online (Sandbox Code Playgroud)
小智 5
队列的实现可以基于FIFO、优先级和LIFO - 这就是官方文档所说的。
当程序员第一次看到“队列”时,他会自动认为“它一定是 FIFO 顺序”(或最终优先顺序)。但正如文档所说,必须有可能使用 Queue 接口进行 LIFO 排序。让我向您解释如何做到这一点。
// FIFO queue usage
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
queue.remove(); // returns 1
queue.remove(); // returns 2
// LIFO queue usage
Queue<Integer> queue = Collections.asLifoQueue(new ArrayDeque<>());
queue.add(1);
queue.add(2);
queue.remove(); // returns 2
queue.remove(); // returns 1
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,根据实现的不同,Queue 接口也可以用作 LIFO。
这里提供的Stack和LinkedList只是一个集合。队列不是集合。它是并发包的一部分,可以与线程池一起使用。
我刚刚再次验证并阅读了您引用的javadoc。我认为使用 LIFO 队列的唯一选择是使用带有自定义比较器的优先级队列,该比较器根据插入时间以相反的顺序比较元素。
| 归档时间: |
|
| 查看次数: |
15746 次 |
| 最近记录: |