继续上一篇,这篇说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,如需转载请自行联系原作者