Clojure中是否有双端队列?我的印象是Clojure的PersistentQueue
是单端的(我错了吗?)。我需要能够从队列的任何一端删除(即“弹出”)和“窥视”数据。我对双端队列的意思是https://en.wikipedia.org/wiki/Double-ended_queue。
我看到Java有一个双端队列,但我不确定如何在Clojure中实例化队列对象。 尝试使用以下方法创建新队列:
(java.util.Dequeue.)
给出错误:
找不到接口java.util.Queue的匹配ctor。
答案 0 :(得分:6)
Clojure中是否有双端队列?
AFAIK no。
我的印象是Clojure的
PersistentQueue
单身(我错了吗?)。
最后只允许conj
,peek
/ pop
开始。
我看到Java有一个双端队列,但我不确定如何在Clojure中实例化队列对象。
您无法实例化java.util.Queue
,因为它是interface。看看子接口java.util.Deque
及其实现类:
您可以创建和使用ArrayDeque
,如下所示:
(def deque (java.util.ArrayDeque. [1 2 3]))
;;=> 'user/deque
(.pollFirst deque)
;;=> 1
但是,您可能希望查看{C}的持久实现deque-clojure,而不是使用互操作语法和可变集合。
答案 1 :(得分:3)
只是为了完整,纯粹的clojure版本可能如下所示:
{{1}}