天天看点

【scala初学】collections mutable.Set

  继续上一篇,这篇说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&gt; </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&gt; s +</code><code>=</code> <code>4</code>

<code>scala&gt; s -</code><code>=</code> <code>2</code>

<code>scala&gt; 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&gt; </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,如需转载请自行联系原作者