博主自从前两天学习了python的List、Tuple和Map之后,得到了一点小的启示:熟练应用这些数据结构,除了手底下敲一遍,别无它法。而数据结构往往是我们开始工作的起点。
本文的参考资料主要来自:
Scala课堂
First Step to Scala
Scala官方文档
概述
首先我们下文中基本上都会采用val
关键字而不是var
。这其中关系到了函数式编程的特征,但这里不会不多说。
List
人如其名,链表,元素不可更改
性能:prepend,access head or tail 都为O(1),其余为O(n)
空间: 操作基本上在连表上完成,所以为常数级别。
操作示例:
// Make a list via the companion object factory
val days = List("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
// Make a list element-by-element
val when = "AM" :: "PM" :: List()
// Pattern match
//这个模式匹配看起来很有意思~可以拆分成两部分
days match {
case firstDay :: otherDays =>
println("The first day of the week is: " + firstDay)
case List() =>
println("There don't seem to be any week days.")
}
需要额外注意一下的是串联操作:
//::和:::是一个右操作符,所以结尾需要一个List()
//如果左侧是一个数字则使用::,否则:::
val a =List(1):::List(2,3,4):::5::List()
Set
set没有重复
有两种Set,分别是可改和不可改的。
我们着重看一看具体可变的(mutable)的函数
scala> import scala.collection.mutable.HashSet
import scala.collection.mutable.HashSet
scala> val s=new HashSet[String]
s: scala.collection.mutable.HashSet[String] = Set()
scala> s+="shit"
res49: s.type = Set(shit)
scala> s+="fuck"
res50: s.type = Set(fuck, shit)
scala> s.contains("shit")
res51: Boolean = true
scala> s-="fuck"
res52: s.type = Set(shit)
Maps
如图所示,也有两个版本。
scala> var m=new HashMap[String,String]
m: scala.collection.mutable.HashMap[String,String] = Map()
scala> m+="shit"->"greatful"
res67: scala.collection.mutable.HashMap[String,String] = Map(shit -> greatful)
scala> m("shit")
res68: String = greatful
scala> m-="shit"
res69: scala.collection.mutable.HashMap[String,String] = Map()
可以看到Set和Map中都有+=、-=的方法。