var seq = Seq[String]()
seq = seq :+ "hello"
var set = Set[String]()
set += "hello"
Seq和Set之间有什么区别?
答案 0 :(得分:8)
http://www.scala-lang.org/api/current/scala/collection/Seq.html
序列始终具有已定义的元素顺序。序列提供了一种适用于索引的方法。
Seq
与java.util.List
类似。
http://www.scala-lang.org/api/current/scala/collection/Set.html
集合是一个不包含重复元素的集合。
这非常类似于数学意义上的“集合”:http://en.wikipedia.org/wiki/Set_(mathematics)
Set
与java.util.Set
类似。
答案 1 :(得分:6)
许多地方都会对此进行描述,例如Seq和Set以及Scala's Collection Library指南的文档。
还可以通过其特有的功能来描述它们:
Set[A]
是一个函数A => Boolean
,这意味着可以检查元素是否存在。
Seq[A]
是一个函数Int => A
,这意味着它中的每个元素都有一个索引,并且可以检索任何给定索引处的元素。
这也解释了两个陈述之间的区别:
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"
- >集合保持不变。
有关详细信息,请参阅集合上的api:http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Set