繼續上一篇,這篇說mutable.Set
WHAT IT IS
WHAT IT DOES
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也提供了+,++,-,--等方法,但是更有效的是+=,
+=,-=在可變和不可變Set,用法基本相同,那麼實際效果呢:
不可變:
1
2
3
4
5
6
<code>scala> </code><code>var</code> <code>s </code><code>=</code> <code>Set(</code><code>1</code><code>, </code><code>2</code><code>, </code><code>3</code><code>)</code>
<code>s</code><code>:</code> <code>scala.collection.immutable.Set[Int] </code><code>=</code> <code>Set(</code><code>1</code><code>, </code><code>2</code><code>, </code><code>3</code><code>)</code>
<code>scala> s +</code><code>=</code> <code>4</code>
<code>scala> s -</code><code>=</code> <code>2</code>
<code>scala> s</code>
<code>res</code><code>2</code><code>:</code> <code>scala.collection.immutable.Set[Int] </code><code>=</code> <code>Set(</code><code>1</code><code>, </code><code>3</code><code>, </code><code>4</code><code>)</code>
下面看一下可變的Set
<code>scala> </code><code>val</code> <code>s </code><code>=</code> <code>collection.mutable.Set(</code><code>1</code><code>, </code><code>2</code><code>, </code><code>3</code><code>)</code>
<code>s</code><code>:</code> <code>scala.collection.mutable.Set[Int] </code><code>=</code> <code>Set(</code><code>1</code><code>, </code><code>2</code><code>, </code><code>3</code><code>)</code>
<code>res</code><code>3</code><code>:</code> <code>s.</code><code>type</code> <code>=</code> <code>Set(</code><code>1</code><code>, </code><code>4</code><code>, </code><code>2</code><code>, </code><code>3</code><code>)</code>
<code>res</code><code>4</code><code>:</code> <code>s.</code><code>type</code> <code>=</code> <code>Set(</code><code>1</code><code>, </code><code>4</code><code>, </code><code>3</code><code>)</code>
效果基本一樣,都是從Set(1,2,3)到Set(1,3,4),即便如此,他們内部行為也不同。 可變的Set s+=4,是在Set的實體位址上改變了。s-=2亦如此。(書生:這裡我們仔細觀察一下,定義不可變的Set的,用的var s,每次s重新指向了新的Set。 而可變的Set的用val定義,實體位址一直未曾改變,真正變化的是Set的内部元素)
略,講的是add特點,對比上表
由上所得,對于小尺寸的Sets(4以内),不可變的set會更加的簡潔高效。如果你期望set的長度盡可能小,選擇immutable.
Set有兩個子接口 SortedSet 和 BitSet.
本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/yjplxq/1432363,如需轉載請自行聯系原作者