遍历集合可以使用迭代器 iterator 的那套迭代方式. Seq 是一个有先后次序的序列, 比如数组或列表. IndexedSeq 可以通过下标进行任意元素的访问. 例如 ArrrayBuffer.
Set 是一组没有先后次序的值, 在 SortedSet 中, 元素以某种排过序的顺序被访问.
Map 是一组 (键, 值) 对偶, SortedMap 按照键的顺序访问实体
Scala 集合有三个基本操作:
head 返回集合第一个元素
tail 返回一个集合, 包含除了第一元素之外的其他元素
isEmpty 在集合为空时返回 true
可变和不可变的集合
Scala 同时支持可变的和不可变的集合, 不可变的集合从不改变, 因此不可变集合是线程安全的集合, 例如有: scala.collection.mutable.Map, 也有 scala.collection.immutable.Map. 它们有一个共有的超类型 scala.collection.Map
Scala 优先采用不可变集合. scala.collection 包中的伴生对象产出不可变的集合例如: scala.collection.Map("hello" -> 42)是一个不可变的映射
添加元素和移除元素的操作符
向后 (:+) 或向前 (+:) 追加元素到序列当中
添加 (+) 元素到无先后次序的集合中
用 - 移除元素
用 ++ 和 -- 来批量添加和移除元素
对于列表优先使用:: 和:::
改值操作有 +=,++=,-=,--=
对于集合, 使用 ++,& 和 --
尽量不用 ++:,+=: 和 ++=:
- def main(args: Array[String]): Unit = {
- // 初始化构建元素个数为 4 的集合对象
- val v = Vector(1, 2, 3, 4)
- // 添加集合后添加 5(新建集合添加 5)
- println(v :+ 5)
- // 集合前添加 0(新建集合添加 0)
- println(5 +: v)
- // 初始化构建高效数组缓存
- val array = ArrayBuffer(1, 2, 3, 4)
- // 添加元素 5
- println(array += 5)
- // 删除元素 1
- println(array -= 1)
- // 初始化 Set 集合对象
- val number = Set(1, 2, 3)
- // 添加 4 元素(新建 set 集合添加 4)
- println(number + 4)
- // 添加 4 元素(新建 set 集合移除 3)
- println(number - 3)
- // 使用 ++ 添加多个 set 元素(结果为无序的)
- println(number ++ Set(4, 5, 6))
- }
- }
可以使用 ++ 一次添加多个元素, 也可以使用 -- 一次删除多个元素
将函数映射到集合
有时候可以对元素进行变换, map 方法可以将某个函数应用到集合每个元素并进行相应的元素处理
- // 初始化创建 List 集合映射 map
- val name = List("Bob", "Michael", "Marry")
- println(name.map(_.toUpperCase))
- val result = for (n <- name) yield n.toUpperCase
- println(result)
- // 拼接字符串
- def unclase(string: String) = Vector(string.toLowerCase(), string.toUpperCase())
- println(name.flatMap(unclase))
与 java 集合相互转换
import scala.collection.JavaConversions._
需要手动导入, 在项目中发现不手动导入这个, idea 编辑器编译器会报错
常见转换 API
隐式函数 | java 集合类型 |
---|---|
asjavaEnumeration | Enumeration |
setAsJavaSet | Set |
mapAsJavaMap | Map |
bufferAsJavaList | List |
来源: http://www.bubuko.com/infodetail-2784792.html