Clojure中的双端队列

时间:2017-01-08 18:27:13

标签: clojure queue interop

Clojure中是否有双端队列?我的印象是Clojure的PersistentQueue是单端的(我错了吗?)。我需要能够从队列的任何一端删除(即“弹出”)和“窥视”数据。我对双端队列的意思是https://en.wikipedia.org/wiki/Double-ended_queue

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

(java.util.Dequeue.) 

给出错误:

  

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

2 个答案:

答案 0 :(得分:6)

  

Clojure中是否有双端队列?

AFAIK no。

  

我的印象是Clojure的PersistentQueue单身(我错了吗?)。

最后只允许conjpeek / 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}}