Scala中Seq和Set之间的区别是什么

时间:2013-11-06 02:48:24

标签: scala set seq

var seq = Seq[String]()
seq = seq :+ "hello"

var set = Set[String]()
set += "hello"

Seq和Set之间有什么区别?

4 个答案:

答案 0 :(得分:8)

SEQ

http://www.scala-lang.org/api/current/scala/collection/Seq.html

  

序列始终具有已定义的元素顺序。序列提供了一种适用于索引的方法。

Seqjava.util.List类似。

http://www.scala-lang.org/api/current/scala/collection/Set.html

  

集合是一个不包含重复元素的集合。

这非常类似于数学意义上的“集合”:http://en.wikipedia.org/wiki/Set_(mathematics)

Setjava.util.Set类似。

答案 1 :(得分:6)

许多地方都会对此进行描述,例如SeqSet以及Scala's Collection Library指南的文档。

还可以通过其特有的功能来描述它们:

  • Set[A]是一个函数A => Boolean,这意味着可以检查元素是否存在。

  • Seq[A]是一个函数Int => A,这意味着它中的每个元素都有一个索引,并且可以检索任何给定索引处的元素。

    < / LI>

这也解释了两个陈述之间的区别:

seq = seq :+ "hello"
seq = "hello" +: seq 

set = set + "hello"

Set上,人们无法控制元素的排序,因此您只需向其中添加元素即可。在Seq上,因为每个元素都有一个索引,所以它与放置元素的位置相关,因此我们有+::+,分别指定元素是作为序列的前缀或附加。

答案 2 :(得分:2)

问自己这个问题,Scala工作表提供了一个答案:

val seq = Seq(1,1)                   //> seq  : Seq[Int] = List(1, 1)
val set = Set(1,1)                   //> set  : scala.collection.immutable.Set[Int] = Set(1)

一个明显的区别是Seq允许重复,而Set不允许重复。

答案 3 :(得分:0)

集合是存储不同值的集合,而seq是集合的更通用版本,它是常用的类,如Array,List等常用的超类。

在你的例子中

var set = Set[String]()
set += "hello"

set包含“hello”

set += "hello"

- &GT;集合保持不变。

有关详细信息,请参阅集合上的api:http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Set