首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Clojure中,什么时候应该在列表上使用向量,反之亦然?

在Clojure中,什么时候应该在列表上使用向量,反之亦然?
EN

Stack Overflow用户
提问于 2009-07-18 16:41:26
回答 3查看 28.2K关注 0票数 159

我读到向量不是序列,但列表是。我不确定使用一个而不是另一个的理由是什么。似乎向量是使用最多的,但这是有原因的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-18 17:28:18

再一次,我似乎已经回答了我自己的问题,不耐烦地在Freenode上的#clojure中问了这个问题。在Stackoverflow.com上鼓励回答自己的问题是件好事:D

我和Rich Hickey进行了一次简短的讨论,下面是讨论的要点。

代码语言:javascript
复制
[12:21] <Raynes>    Vectors aren't seqs, right?
[12:21] <rhickey>   Raynes: no, but they are sequential
[12:21] <rhickey>   ,(sequential? [1 2 3])
[12:21] <clojurebot>    true
[12:22] <Raynes>    When would you want to use a list over a vector?
[12:22] <rhickey>   when generating code, when generating back-to-front
[12:23] <rhickey>   not too often in Clojure
票数 122
EN

Stack Overflow用户

发布于 2009-07-18 17:06:46

如果您做过大量的Java编程,并且熟悉Java集合框架,那么可以考虑像LinkedList这样的列表和像ArrayList这样的向量。所以你可以用同样的方法来选择容器。

进一步的说明:如果您打算在序列的前面或后面单独添加项,链表比向量好得多,因为这些项不需要每次都打乱顺序。然而,如果你想频繁地获取特定的元素(而不是列表的前面或后面)(例如,随机访问),你会想要使用vector。

顺便说一句,向量可以很容易地转换成序列。

代码语言:javascript
复制
user=> (def v (vector 1 2 3))
#'user/v
user=> v
[1 2 3]
user=> (seq v)
(1 2 3)
user=> (rseq v)
(3 2 1)
票数 95
EN

Stack Overflow用户

发布于 2009-07-18 17:19:53

向量的随机访问时间为O(1),但它们必须预先分配。列表可以动态扩展,但访问随机元素是O(n)。

票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1147975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档