首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

scala器皿对象 - 2

2012-12-28 
scala容器对象 - 2?可变和不可变的对象提供相同的方法,但是处理结果却不一样,可变对象修改对象内容然后返

scala容器对象 - 2


?




可变和不可变的对象提供相同的方法,但是处理结果却不一样,可变对象修改对象内容然后返回,不可变对象创建一个新的对象返回。scala的函数式编程风格鼓励使用不可变的数据结构,不过到底如何使用,可以看具体场景,如果你习惯了可变对象,那么可以先用可变对象,到熟悉了函数式编程那么尽量使用不可变对象。

?

4.1添加新元素(+)

可变和不可变的Set都提供了一个名为+的操作:

var?set?=?Set(1, 2, 3)?//?此处为?var,val不可重新赋值

set += 4?//set = set + 4


对于可变Set,+操作会将元素添加到自身;对于不可变的Set,返回一个添加了新元素的Set。

看一下可变Set:

import?scala.collection.mutable.Set

val?movieSet?=?Set("Hitch",?"Poltergeist")

movieSet +=?"Shrek"?// movieSet.+=(“Shrek”)


上面movieSet?执行+=之前和之后是一个对象。上面定义是val,因为可变对象不需要重新赋值。

?

4.2HashSet

Set一般可以实现大多数的操作。如上节所示:

var?set?=?Set(1, 2, 3)

更详细的写法如下:

var?set?=?Set.apply(1, 2, 3)


apply方法是Set trait?的伴生对象(object Set)定义的。如果想直接使用某个类,和上面一样:

import?scala.collection.immutable.HashSet

val?hashSet?=?HashSet("Tomatoes",?"Chilies")

println(hashSet +?"Coriander")


HashSet也有可变和不可变的实现。

4.3set的方法(可变和不可变)

4.3.1contains

是否包含元素

4.3.2apply

apply也可以用来测试是否包含元素,如下:

val?fruit = Set("apple",?"orange",?"peach",?"banana")

fruit("peach")?// true

fruit("potato")?// false

?

4.3.3subSetOf

用来检测一个Set是否是另一个的子集。

?

4.3.4+

增加一个或者多个元素


set + element

set + (element1, element2)

?

4.3.5++

Set相加。


setA + setB

?

4.3.6移除

和增加元素一样,移除的方法也有两个?-?和?--,用法和+?、++相同。

如果要移除set中所有元素,那么可以用empty方法。

?

4.3.7&、intersection

获得两个Set的交集

setA & setB

setA intersection setB

?

4.3.8|、union

获得两个Set的并集

setA | setB

setA union setB

?

4.3.9&~?、diff

获得两个Set中不同的部分。

SetA &~ setB

setA diff setB

?

4.4可变Set、mutable.Set

可变Set一般都返回元素变化后的自身。

4.4.1+=

Set + a

set + (a, b, c)

4.4.2++=

SetA ++= setB

4.4.3add

添加一个元素,如果这个元素以前不存在,那么返回true,如果之前已经存在则返回false。

4.4.4-=

4.4.5--=

4.4.6remove

类似add

4.4.7retain

?

4.4.8clear

删除所有的元素

?

4.4.9update、()=

set(x)=newX

4.4.10clone

克隆对象。

?

热点排行