第十章 Scala 容器(二):如何選擇一個合適的容器類

1. 解決方案數組

    實際上Scala的容器分爲三大類:Seq,Map,Set。Seq容器線性地存儲了元素,這些元素或者被以數組加索引的形式存儲,或者使用鏈表的方式存儲。Map存儲的是鍵值對,當你想用(key-value)形式時能夠使用Map。而Set存儲的事不可重複的元素。
ui

2. 選擇一個合適的Sequence

    當你想選擇一個Seq來使用的時候,你須要考慮兩件事:1. 使用索引來快速訪問你的容器(數組)中的內容,仍是使用鏈表方式;2. 你的容器中的內容是可變的仍是不可變的spa

    Scala中對於Seq,針對:數組/鏈表,可變/不可變的組合,推薦使用如下四種通用容器類。
排序

    經過表(10-1)咱們能夠看出,若是你想使用一個不可變的帶索引的容器,你應該選擇Vector,若是你想使用一個可變的帶索引的容易你應該選擇ArrayBuffer。一樣的List和ListBuffer爲鏈式存儲的不可變和可變容易。
索引

    主要的不可變序列選擇表,其中List和Vector是咱們一般狀況下使用的不可變容器。Queue爲先進先出的鏈式結構,Range爲一個帶索引的序列,Stack爲後進先出的鏈式結構,Stream則是一個懶加載的List。String比較特殊,做爲一個字符串類,實際上它是一個不可變的字符序列(index方式存儲)。字符串

    可變序列選擇表,Array和ArrayBuffer的區別是,Array不可改變大小;ArrayStack是一個後進先出且以Index方式存儲的容器;DoubleLinkedList是一個可變雙向鏈表,它的刪除效率很是高;LinkedList是一個可變單項鍊表,ListBuffer使用起來喝ArrayBuffer同樣,可是若是你計劃吧一個ArrayBuffer轉化爲一個鏈表那麼你使用ListBuffer會比較好;MutableList是一個可變單向鏈表,可是能夠在常數時間內添加元素;Queue和Stack就是一個可變的先進先出和後進先出結構;StringBuilder則是一個可變的String。
table

    選擇一個map比選擇一個Seq要簡單多,你能夠直接使用可變的和不可變的Map。SortedMap不可變可是其內容是按key值排序的;LinkedHashMap是可變的,其內容按插入的順序存儲;ListMap則是按插入順序反序存儲;TreeMap是使用紅黑樹存儲
效率

    選擇一個Set,Set像Map同樣,能夠直接使用可變與不可變的Set。SoredSet是按內容排序存儲;LinkedHashSet是按插入順序存儲;ListSet能夠想使用List同樣使用,按插入順序反序存儲;
容器

相關文章
相關標籤/搜索