02.27 Scala学习七之集合了解

Scala有一个非常通用,丰富,强大,可组合的集合库;集合是高阶的(high level)并暴露了一大套操作方法。

Scala的所有的集合类都可以在包 scala.collection 包中找到,其中集合类都是高级抽象类或特性

Iterable[T] 是所有可遍历的集合,它提供了迭代的方法(foreach)。Seq[T] 是有序集合,Set[T]是数学上的集合(无序且不重复),Map[T]是关联数组,也是无序的。

Scala 集合类系统地区分了可变的和不可变的集合。


可变集合可以在适当的地方被更新或扩展,意味着你可以修改、添加、移除一个集合的元素。

而不可变集合类,相比之下,永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。但是这 些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变。


可变的集合类位于 scala.collection.mutable 包中,而不可变的集合位于 scala.collection.immutable 。

scala.collection 包中的集合,既可以是可变的,也可以是不可变的


官方文档

http://www.scala-lang.org/docu/files/collections-api/collections.html

List集合

创建输出

获取头部元素

获取除去头部元素之外的元素

获取尾部元素

获取除去尾部元素之外的元素

可以从头拼接的方式创建集合

如果一直拼接创建集合(Nil可以理解为空串)

如果从尾到头创建集合

遍历for

如果更改元素会提示错误list4(0) = 100;

可变List

import scala.collection.mutable.ListBuffer

构建

添加元素,遍历

给指定位置插入元素

删除元素

直接删除List

删除指定位置的元素

获取数据

更新数据

转换


如果想用Java集合

把Java中List转换为scala中List

import scala.collection.JavaConverters._

List中常见方法:

reverse

Zip方法

ZipAll

转换range

Foreach遍历,Foreach一般用于数据输出,因为foreach没有返回值

转换为字符串

Map输出

Map一般是对每一个元素进行处理的,是有返回值的

flatMap 对集合中每一个元素进行处理,使用给定函数,并且返回一个新的集合 是在map的基础上进行了一次扁平化操作,不是把函数的返回值作为新集合的元素,而是把返回值中的元素作为新集合的元素

Filter数据过滤 对集合中的每个元素调用给定函数,如果函数执行返回值是true 就会保留,否则反之

FilterNot和上面相反

Reduce 数据聚合

Fold 数据聚合 和reduce区别是可以给一个初始值

FoldLeft 给定的初始值可以是任意类型

FoldRight

Sorted 对集合元素进行排序

sortBy 类似Sorted 区别在于sortBy根据函数的返回值排序

groupBy 按照给定的函数的返回值对数据进行分组操作,返回结果是Map集合

Set

1)无序不重复

2)+/++/-/-- 都会创造一个新的Set

3)+=/++=/-=/--= 不会创造一个新的Set

创建输出

添加元素

++添加

-正好相反

Set的常用方法和List相似,可以作为练习网上查询使用

访问元素 Set中没有专门的方式去访问数据,因为是无序的

如果直接使用set(0) 是判断0是否存在于set中

将List转换为Set,完成去重

可变Set

import scala.collection.mutable._

有一个特殊的地方:一种特殊的添加元素的方式

Map

是一种Key-Value键值对集合

创建Map

数据读取

Get方法

GetOrElse

可变Map

import scala.collection.mutable._

添加元素

更新操作,如果存在就更新,不存在就插入

遍历

也可以直接key-value

其它用到时候再看

集合常用高阶函数