Scala 与++;用于连接列表

Scala 与++;用于连接列表,scala,Scala,可能重复: 在Scala中,假设我有两个列表 scala> val oneTwo = List(1,2) oneTwo: List[Int] = List(1, 2) 及 我可以通过执行以下操作来连接列表: scala> oneTwo ::: threeFour res30: List[Int] = List(1, 2, 3, 4) 或 这两种方法的区别是什么 谢谢。来自文档: :[B>:A](前缀:List[B]):List[B] ++[B>:A](即:Iterable[B]

可能重复:

在Scala中,假设我有两个列表

scala> val oneTwo = List(1,2)
oneTwo: List[Int] = List(1, 2)

我可以通过执行以下操作来连接列表:

scala> oneTwo ::: threeFour
res30: List[Int] = List(1, 2, 3, 4)

这两种方法的区别是什么

谢谢。

来自文档:

:[B>:A](前缀:List[B]):List[B]

++[B>:A](即:Iterable[B]):列表[B]

您可以看到
++
适用于任何
Iterable
,而
专门用于
列表

scala> val oneTwo = List(1,2)
oneTwo: List[Int] = List(1, 2)

scala> val threeFour = List(3,4)
threeFour: List[Int] = List(3, 4)

scala> val fiveSix = Array(5,6)
fiveSix: Array[Int] = Array(5, 6)

scala> oneTwo ++ fiveSix
res2: List[Int] = List(1, 2, 5, 6)

scala> oneTwo ::: fiveSix
<console>:10: error: value ::: is not a member of Array[Int]
              oneTwo ::: fiveSix
scala>val oneTwo=List(1,2)
oneTwo:List[Int]=List(1,2)
scala>val threeFour=列表(3,4)
three-four:List[Int]=List(3,4)
scala>val fiveSix=数组(5,6)
第五章:数组[Int]=数组(5,6)
scala>oneTwo++fiveSix
res2:List[Int]=List(1,2,5,6)
scala>oneTwo::fiveSix
:10:错误:值:::不是数组[Int]的成员
第二:第五

方法特定于
列表
,而
++
是任何
可遍历
的一部分

区别来自两件事。首先,
List
是最初的Scala集合之一,在编译器中大量使用,并经过特殊优化。
串联与ML语言家族中使用的相同,后者是Scala的灵感来源之一,并且
从中推断

另一方面,
++
伴随着Scala 2.8.0上Scala集合的重新设计而来,这使得方法和继承统一起来。我认为它在那之前就已经存在了(例如,在
),但是集合没有共享一个公共的超类,因此它基本上是其他集合的一种特殊方法

就性能而言,
应该超过
++
,但可能不会太大

scala> oneTwo ++ threeFour
res31: List[Int] = List(1, 2, 3, 4)
scala> val oneTwo = List(1,2)
oneTwo: List[Int] = List(1, 2)

scala> val threeFour = List(3,4)
threeFour: List[Int] = List(3, 4)

scala> val fiveSix = Array(5,6)
fiveSix: Array[Int] = Array(5, 6)

scala> oneTwo ++ fiveSix
res2: List[Int] = List(1, 2, 5, 6)

scala> oneTwo ::: fiveSix
<console>:10: error: value ::: is not a member of Array[Int]
              oneTwo ::: fiveSix