第十章 Scala 容器(一):總體介紹

1. 總體架構

    Scala容器類是很是豐富的,總體架構也比較複雜,下面咱們來根據圖(10-2)來認識一下。Scala的容器類都是從Traversable和Iterable這兩個trait開始的,而後分爲三大類,分別是Seq,Set和Map,而後Seq又分爲IndexedSeq和LinearSeq兩種。其中IndexedSeq能夠理解爲數組形式,相似於Java中的ArrayList,而LinearSeq是以鏈表的形式存儲的,相似於Java中的LinkedList。而後咱們回來再看一下頂端的兩個trait,其中Traversable容許你經過for each來重複遍歷容器中的內容,而Iterable容許你使用Iterable遍歷整個容器,區別是實用iterable遍歷容器時,對於容器內的每一個元素只能遍歷到一次,這一點鶴Java的Iterable保持一致。數組

2. Seq

    咱們來看一下Seq的架構圖,剛纔已經提到Seq分類IndexedSeq和LinearSeq兩大類。架構

    其中IndexSeq容許你經過索引(下標)來隨機訪問,好比你想獲取容器內下標爲5000的值,你能夠直接使用IndexedSeq(5000)來實現,IndexdSeq的默認實現爲Vector。spa

scala> val x = IndexedSeq(1,2,3)
x: IndexedSeq[Int] = Vector(1, 2, 3)

scala> x(1)
res22: Int = 2

    而LinearSeq被高效的劃分爲頭和尾部,其中頭是容器內的第一個元素,而尾部爲除了頭元素以外剩餘的全部元素。咱們能夠方便的使用head和tail已經isEmpty方法來訪問LinearSeq容器。LinearSeq的默認實現爲List。scala

scala> val seq = collection.immutable.LinearSeq(1,2,3)
seq: scala.collection.immutable.LinearSeq[Int] = List(1, 2, 3)

scala> seq.head
res23: Int = 1

scala> seq.tail
res24: scala.collection.immutable.LinearSeq[Int] = List(2, 3)

scala> seq.isEmpty
res25: Boolean = false

3. Map

    Map做爲一個存儲鍵值對的容器(key-value),其中key值必須是惟一的,結構見圖(10-4)。
code

    默認狀況下,咱們能夠經過Map直接建立一個不可變的Map容器對象,這時候容器中的內容是不能改變的。若是你想得到一個內容可變的Map,那麼必須使用scala.collection.mutable.Map來建立。對象

scala> val m = Map(1 -> "a", 2 -> "b")
m: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b)

scala> val m = scala.collection.mutable.Map(1 -> "a", 2 -> "b")
m: scala.collection.mutable.Map[Int,String] = Map(2 -> b, 1 -> a)

4. Sets

    Scala中的Set和Java中的Set同樣,存儲的內容是不可重複的。
索引

    默認狀況下,咱們能夠經過Set直接建立一個不可變的Set容器。和Map同樣你可使用mutable包中的Set來建立一個可變的Set容器。
it

scala> val set = Set(1,2,3)
set: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> val set = collection.mutable.Set(1,2,3)
set: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
相關文章
相關標籤/搜索