如果只需要一个不可变的集合,可以这样子创建,无需 import 引入:
scala> val set = Set(1,2,3)
set: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
如果想用可变的Set,必须import引入它,或者用原路径:
scala> val s = collection.mutable.Set(1,2,3)
s: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
否则,混搭,再使用.toSet什么的,容易出现如此错误:
[error] /home/zhm/sparkAprioriV1/src/main/scala/Sapriori.scala:43: polymorphic expression cannot be instantiated to expected
type;
[error] found : [B >: Int]scala.collection.immutable.Set[B]
[error] required: scala.collection.mutable.Set[Int]
[error] tmp += cdd -> supOrNot(line.toSet, cdd)
[error] ^
[error] one error found
就是开头规定的是"import scala.collection.mutable.Set",中间定义的函数supOrNot 的第一个参数形式是 trans:Set[Int];此时,如果line<-trans(即调用函数supOrNot时输入的第一个参数)使用了.toSet;而toSet对应的是不可变集合。所以:
要求的参数是mutable的,但是输入的参数是immutable的
,所以出现此类错误。
scala> List(1,2,3,1,2,3).toSet
res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
一般的参数类型不符合提示是mismatch之类的,这种错误较少见,记一下。