Clojure语言本身自已有提供了四种集合类型,List,Vector,Set,Map.同时它也可以使用Java的集合类型砂,但是这种方式目前并不推荐使用,因为Clojure集合类型和Java语言的集合类型还是有很大区别的,主要体现在 集合内容不可改变,集合的内容可以多种类型以及持久化。持久化意味着当你在对一个集合的操作都会产生一个新的集合对象(如:插入,删除......),而老的集合对象依然是存在的。

   List
   List的可以使用如下方式定义:
     (def list1 '("aa" "bb" "cc"))
     (def list1 (list "aa" "bb" "cc"))
     (def list1 (quote ("aa" "bb" "cc")))
   以上三种方式都可以定义一个List,和Java中一样List是有序的。

   Vector
   vector可以使用如下方式定义:
     (def v ["v1" "v2"])
     (def v (vector "v1" "v2"))
   同样vector也是有序的,在Clojure的方法参数定义就是使用的Vector,比如定义一个类以于Java的public void say(String name)用Clojure则使用如下的方式
(defn say [name])
    
   Set
   set可以使用如下方式定义:
   (def s {"aa" "bb" "cc"})
   (def s #{"aa" "bb" "cc"})
   (def s (hash-set "aa" "bb" "cc"))
 
    Set分可有序set和无序set,上面示例中的"hash-set"就是代表 无序set,而有序set则可用 sorted-set来定义.
    可以用函数 contains? 来检测一个set中是否存在某个元素 (contains? s "aa") 如果s中存在"aa"元素,则返回true,否则返回false.
    contains?函数可以使用在Set和Map无素上。
    同Java中一样。Set中的元素是唯一的。

    Map
    map可以使用如下方式定义:
    (def m {"k1" "v1","k2" "v2"})
    (def m (hash-map "k1" "v1","k2" "v2"))
    同样,map也分为有序和无序的,如果想申明有序的map则使用 sorted-map即可。
    可以使用函数keys,vals得到键集合和值集合.(keys m)
    get函数可以根据key取得相应的val值。(get m "k1") 返回的是"v1"
    get也可以用在 其它的集合中,比如从Vector中取元素的值.(get v 1) 代表取出集合v中的第2个无素。注意,集合的编号是从0开始的。


   本部分主要简单介绍了一下Clojure中的集合的基本用法。后续会继续介绍更多的一些东西。