scala 中创建集合需要内存,集合与集合之间的转换时,每次转换生成新的集合时,新的集合也需要内存。如果有一个非常大的初始集合,需要经过多次转换,每次转换都生成一个新的集合,才能得到最终的结果,那么这时,在集合转换过程中内存开销非常大。Scala 迭代器模式处理数据,很好的解决了内存占用大的问题。
Scala 迭代器模式处理数据每次将集合的转换转变成了迭代器之间的转换,迭代器是不需要占用内存存储的,迭代器只是一个指针,指向了最初的原始数据,这样,数据处理过程中内存占用非常小。
迭代器模式处理示例:
//非迭代器模式处理,浪费内存 val list1 = List[String]("hello java","hello python","hello scala") val list2 = list1.flatMap(one=>{one.split(" ")}) val list3 = list2.map(one=>{one+"#"}) list3.foreach(println) println("********************") //迭代器模式处理,内存小 val list = List[String]("hello java","hello python","hello scala") val iter1 = list.iterator val iter2 = iter1.flatMap(one=>{one.split(" ")}) val iter3 = iter2.map(one=>{one+"#"}) while(iter3.hasNext){ val one = iter3.next() println(one) }Scala Trait(特质) 相当于 Java 的接口,实际上它比接口还功能强大。与接口不同的是,它还可以定义属性和方法的实现。
一般情况下 Scala 的类可以继承多个 Trait,从结果来看就是实现了多重继承。第一个关键字使用 extends,之后使用 with。
Trait(特质) 定义的方式与类类似,但它使用的关键字是 trait。
注意:
继承的多个 trait 中如果有同名的方法和属性,必须要在类中使用“override”重新定义。 trait 中不可以传参数 trait Read { val readType = "Read" val gender = "m" def read(name:String){ println(name+" is reading") } } trait Listen { val listenType = "Listen" val gender = "m" def listen(name:String){ println(name + " is listenning") } } class Person() extends Read with Listen{ override val gender = "f" } object test { def main(args: Array[String]): Unit = { val person = new Person() person.read("zhangsan") person.listen("lisi") println(person.listenType) println(person.readType) println(person.gender) } }