Scala:.to [Seq] vs .toSeq on collections

时间:2015-09-21 20:25:00

标签: scala

someCollection.to[Seq]someCollection.toSeq之间有什么区别?我注意到的一件事是,在Map上调用时,.toSeq通常会返回Vector,而.to[Seq]通常会返回ArrayBuffer,但我不是确定它的真正含义。

1 个答案:

答案 0 :(得分:6)

Scala集合的to[T]方法是更通用的函数。它需要一个隐式参数作为CanBuildFrom[From, Elem, To]类型的值,它定义了如何使用To中包含Elem类型元素的集合From。通常,toSeqtoListtoMap,...直接转发到此方法,例如Set就是这种情况。

但是,某些类为某些toXXX方法提供了特殊的实现,以便提高效率。内部调用toSeq的{​​{1}}类的Map实现就是这种情况。 toBuffer会返回toBuffer。与此相反,将使用ArrayBuffer隐式值调用更通用的to[Seq]方法,该隐式值返回不可变的CanBuildFrom集合。