Scala for the impatient: ch13
所有集合都擴展自Iterable trait
scala 中每個集合特質或類都帶有apply的伴生對象,此為統一創建原則
- Iterable(0xFF,0xFF00,0xFF0000)
- Set(Color.RED,Color.Green)
- Map(Color.RED->0xFF0000)
- SortedSet("Hello","World")
可變不可變集合都來自collection
- scala.collection.immutable.Map, scala.collection.mutable.Map 來自 scala.collection.Map
- scala.collection.Map 會優先採用不可變集合
-
vector 為ArrayBuffer不可變的版本:以樹形結構實現,每個節點不得超過32個子節點。
- 對於一個100萬個元素的向量,我們只需要四層節點(32^4約莫100萬)。所以要訪問該向量的某個元素只需要四跳,但如果是鏈表(e.g. List),則需要50000跳
val l= mutable.LinkedList(-1,-2,4,7)//LinkedList 可用.elem及.next迴圈 var curr=l while(curr!=Nil){ if(curr.elem<0) curr.elem=0 curr = curr.next } var curr2=l while(curr2 != Nil && curr2.next !=Nil ){//去除每兩個元素中的一個 curr2.next=curr2.next.next curr2= curr2.next } curr2 //注意:若要讓最後一筆變成Nil,在LinkedList中要設為LinkedList.empty
集是不重複元素的集合
Set(1,3,2,4)+1//+1無效
-
集是不保留元素的順序,是以哈希集來看
- Set(1,2,3,4,5,6),則元素被訪問的的順序為5,1,6,2,3,4
- 哈希集查找元素比起數組或列表快很快
-
位集(bit set)是集的一種實現