Clojure中的双端队列

Dar*_*ylG 4 queue interop clojure

在Clojure中有一个双端队列吗?我的印象是Clojure PersistentQueue是单端的(我错了吗?).我需要能够从队列的任一端删除(即"弹出")和"查看"数据.我对双端队列的解释是https://en.wikipedia.org/wiki/Double-ended_queue.

我看到Java有一个双端队列,但我不确定如何在Clojure中实例化队列对象.尝试创建一个新队列:

(java.util.Dequeue.) 
Run Code Online (Sandbox Code Playgroud)

给出错误:

找不到接口java.util.Queue的匹配ctor.

bea*_*u13 6

在Clojure中有一个双端队列吗?

AFAIK没有.

我的印象是Clojure PersistentQueue是单端的(我错了吗?).

它只允许conj在结束和peek/或pop从开始.

我看到Java有一个双端队列,但我不确定如何在Clojure中实例化队列对象.

您无法实例化,java.util.Queue因为它是一个接口.看看子接口java.util.Deque及其实现类:

例如,您可以创建和使用ArrayDeque如下:

(def deque (java.util.ArrayDeque. [1 2 3]))
;;=> 'user/deque

(.pollFirst deque)
;;=> 1
Run Code Online (Sandbox Code Playgroud)

但是,您可能希望查看在Clojure中提供持久实现的deque-clojure,而不是努力使用互操作语法和可变集合.