持久队列实现了Sequential接口但未实现java.util.List接口。列表和Sequential都是等价分割,这意味着您可能遇到非传递性等价。
(def q (conj clojure.lang.PersistentQueue/EMPTY 1 2 3)) ;=> #user/q (def al (doto (java.util.ArrayList.) (.add 1) (.add 2) (.add 3))) ;=> #user/al (def v [1 2 3]) ;=> #user/v (= al v) ;=> true (= v q) ;=> true (not= al q) ;=> true
这是因为PersistentQueue是一个Sequential但不是一个列表,ArrayList是一个列表但不是一个Sequential,而PersistentVector既是。