- 在scala的集合体系中, Iterable时共同的Trait., Iterable要求继承者实现一些共同的方法, 例如对元素的遍历等.
- Array时一个非常基础的数据结构, 不属于Scala集合体系中.
- Scala的集合体系中分为可变集合和不可变集合, 分别在scala.collection.mutable和scala.collection.immutable包中.
List是元素的列表集合,是不可变的:
- 第一点:List中head是指第一个元素,tail是指剩下的元素构成的List集合;
- 第二点:使用::这个操作符来把List和其它的元素进行组拼来构建新的List
- 第三点:如果集合中没有元素的话,此时为Nil,例如说List中只有一个元素,那么head就是这个元素本身,tail操作就会返回Nil
scala类与对象
- 如果声明为private, 不可通过(new HiScala).name 进行访问
class HiScala {
private var name = "spark"
def sayName(){println(name)}
def getName = name
}
- 如果不声明private, 可以通过上述方式进行访问, 不过其实scala自动创建了getName, setName方法, 并且使用getName来获得name值.
class HiScala {
var name = "spark"
def sayName(){println(name)}
def getName = name
}
val scal = new HiScala
scal.name
- 也可以手动复写方法, 达到对setter,getter控制的目的
object TestScala {
def main(args: Array[String]): Unit = {
val p = new Person2
p.name = "123";
}
}
class Person2{
private var myName = "flink"
def name = this.myName
def name_=(newName : String): Unit = {
myName = newName
println("newName " + newName)
}
}
- private[this] 只能够在当前类内部访问, 并且也只能够在当前对象中访问
class Person2 {
private[this] var myName = "flink"
private def name = this.myName
def name_=(newName: String): Unit = {
myName = newName
println("newName " + newName)
}
def talk(person2: Person2): Unit = {
println("talk:" + person2.myName)
}
}
此时person2.myName会报错.
- 构造对象的时候, 主构造器必须被调用到. 次构造器必须也调用主构造器.
class Person3 {
private var name = "flink"
private var age = 1
def this (name: String, age: Int) {
this ()
this.name = name
this.age = age
}
}