【scala初學】collections mutable.Set

    繼續上一篇,這篇說mutable.Set
html

WHAT IT IS

WHAT IT DOESide

Additions:
xs += x xs增長x,返回xs
xs += (x, y, z) xs增長括號內元素,返回xs
xs ++= ys xs增長ys內全部元素,返回xs
xs add x 增長x到xs,若是不重複,就返回true,重複,返回false
Removals:
xs -= x 從xs刪除x ,返回xs
xs -= (x, y, z) 從xs中刪除括號中的元素 返回xs
xs --= ys 從xs中刪除ys中全部的元素 返回xs
xs remove x 刪除x, 若是xs中包含x並正常刪除,返回true,不然false
xs retain p xs保留知足斷言p的那些元素
xs.clear() 移除全部元素
Update:
xs(x) = b (能夠寫成:xs.update(x,b)). b是true,增長x到xs,不然,從xs刪除x
Cloning:
xs.clone 返回一個新的Set,元素同xs


如不可變的Set同樣,可變Set也提供了+,++,-,--等方法,可是更有效的是+=,

spa

+=,-=在可變和不可變Set,用法基本相同,那麼實際效果呢:
scala

不可變:代理

scala> var s = Set(1, 2, 3)
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
scala> s += 4
scala> s -= 2
scala> s
res2: scala.collection.immutable.Set[Int] = Set(1, 3, 4)

下面看一下可變的Set
orm

scala> val s = collection.mutable.Set(1, 2, 3)
s: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
scala> s += 4
res3: s.type = Set(1, 4, 2, 3)
scala> s -= 2
res4: s.type = Set(1, 4, 3)

   效果基本同樣,都是從Set(1,2,3)到Set(1,3,4),即使如此,他們內部行爲也不一樣。 可變的Set s+=4,是在Set的物理地址上改變了。s-=2亦如此。(書生:這裏咱們仔細觀察一下,定義不可變的Set的,用的var s,每次s從新指向了新的Set。 而可變的Set的用val定義,物理地址一直不曾改變,真正變化的是Set的內部元素)htm


   略,講的是add特色,對比上表對象


   可變Set默認實現使用的是哈希表存儲Set的元素; 不可變Set默認實現一個代理匹配到元素的數字。(書生:下面指immutable set)一個空的Set是一個單例對象,若是長度達到4,set做爲一個單獨的對象,他的全部元素會做爲他的字段。超過4,set被實現做爲 hash tries.接口

      由上所得,對於小尺寸的Sets(4之內),不可變的set會更加的簡潔高效。若是你指望set的長度儘量小,選擇immutable.rem


Set有兩個子接口 SortedSet 和 BitSet.

相關文章
相關標籤/搜索