非常感谢大家的收藏和订阅,欢迎大家就文章的内容和形式多提出意见和建议,希望大家多多讨论一起进步。继续上次学习内容,这次主要学习collection库:
5、数组
数组的声明:val 数组名 = new Array[数据类型] (长度) 。例如:val myarray = new Array[String](3).
注意到这里是val而不是var,函数式语言鼓励使用不可变数据结构,这里myarray是不能被重新赋值的,但变量指向的对象内部是可以改变的。数组的可变性也体现在这里。数组的访问是通过小括号和下标来实现的。如果使用初始值来创建数组时不能使用new来创建,原因在类和对象中来讲。 数组的遍历:数组遍历可以使用上面的foreach函数也可以使用,for循环来遍历,和java一样可以通过下标和元素两种遍历方式。
变长数组:scala中通过ArrayBuffer来实现和java中的ArrayList相仿,但更强大。同Array如果使用初始值来创建数组时不能使用new。
ArrayBuffer的一些操作:
6、列表
scala有别于Java的列表List,在这里列表是不可变的对象序列,含义是列表的内容一旦被创建了就不可被改变,即使对列表调用了某个方法看起来改变了列表的值,而实际上只是新创建了另一个列表。这里和java中的String对象有点相似。List的初始化、访问和遍历等方法都和Array是一致的
列表中定义":::"方法来实现两个列表的连接,显然的":::"返回的是一个新的列表。列表另一个常用的方法是"::",方法是把一个新元素组合到列表的最前端。并且"::"是右操作数,比如"1::list1"可以更明确的写为"list1.::(1)"
列表List是没有提供append()函数,这和常规的语言有区别。原因是随着列表的长度增加,耗时将成线性增长,而::是固定耗时,那么怎么通过::来实现在List末尾增加元素呢?
同样List也有ListBuffer兄弟类,ListBuffer包含append函数,可以实现上面功能。
9、元组
元组(Tuple)和列表一样是不可变的,不同的是列表中只能存放一种数据结构,而元组可以存放多种数据类型的元素。另外元组的访问也有所区别,是通过下划线+下标的方式来访问,并且下标是从1开始而不是0开始。
10、集合和映射
集合Set,在scala中两个实现类,一个是不可变的来自与
scala.collection.immutable,另一个当然是可变的,来自与sctala.collection.mutable,默认是使用不可变的Set,如果使用可变Set需import可变Set。
映射Map也同样如此,同时对于Set和Map,它们都有各自的HashSet和HashMap,它们又各自都扩展了可变的和不可变的特性(trait),特性类似与java中的接口。
Set可以存放不同数据类型的数据,具有交集、并集、差集等操作,head返回第一个元素,tail返回除第一个元素以外的集合。
不可变的Map类需要在创建时进行初始化,而可变的Map是可以通过 +=来增加键值对的。
今天陪老婆过节,更新比较晚了,也祝读者或者读者的女性的家属们节日快乐!