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中的集合的基本用法。后續會繼續介紹更多的一些東西。