四天掌握Scala(4)

简介: 你好看官,里面请!今天笔者讲的是scala。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。

四天掌握Scala(4)

1.13.1 不可变列表定义

不可变列表就是列表的 元素、长度 都是不可变的。

语法: 使用 List(元素1, 元素2, 元素3, ...) 来创建一个不可变列表,语法格式:

val/var 变量名 = List(元素1, 元素2, 元素3...)

使用 Nil 创建一个不可变的空列表:

val/var 变量名 = Nil

使用 :: 方法创建一个不可变列表:

val/var 变量名 = 元素1 :: 元素2 :: Nil

使用 :: 拼接方式来创建列表,必须在最后添加一个 Nil。 示例代码如下:

//创建一个不可变列表,存放以下几个元素(1,2,3,4)
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
//使用Nil创建一个不可变的空列表
scala> val b = Nil
b: scala.collection.immutable.Nil.type = List()
//使用`::`方法创建列表,包含-2、-1两个元素
//注意: `::` 前后的空格不能省略,会报错。
scala> val c = -2 :: -1 :: Nil
c: List[Int] = List(-2, -1)

1.13.2 可变列表

可变列表就是列表的元素、长度都是可变的。要使用可变列表,先要导入import scala.collection.mutable.ListBuffer,可变集合都在 mutable 包中,不可变集合都在 immutable 包中(默认导入)。使用 ListBuffer[元素类型]() 创建空的可变列表,语法结构:

val/var 变量名 = ListBuffer[Int]()

使用 ListBuffer(元素1, 元素2, 元素3…) 创建可变列表,语法结构:

val/var 变量名 = ListBuffer(元素1,元素2,元素3...)

示例代码如下:

//创建空的整型可变列表
scala> import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ListBuffer
scala> val a = ListBuffer[Int]()
a: scala.collection.mutable.ListBuffer[Int] = ListBuffer()
//创建一个可变列表,包含以下元素:1,2,3,4
scala> val a1 = ListBuffer(1,2,3,4)
a1: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)

可变列表操作如下:

  1. 获取元素(使用括号访问(索引值)
  2. 添加元素(+=
  3. 追加一个列表(++=
  4. 更改元素(使用括号获取元素,然后进行赋值
  5. 删除元素(-=
  6. 转换为List(toList)转换为不可变列表
  7. 转换为Array(toArray)转换为定长数组
//示例
//1.定义一个可变列表包含以下元素:1,2,3
scala> import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ListBuffer
scala> val a = ListBuffer(1,2,3)
a: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)
//2.获取第一个元素
scala> a(0)
res34: Int = 1
//3.添加一个新的元素:4
scala> a += 4
res35: a.type = ListBuffer(1, 2, 3, 4)
//4.追加一个列表,该列表包含以下元素:5,6,7
scala> a ++= ListBuffer(5,6,7)
res36: a.type = ListBuffer(1, 2, 3, 4, 5, 6, 7)
//5.删除元素7
scala> a -= 7
res37: a.type = ListBuffer(1, 2, 3, 4, 5, 6)
//6.将可变列表转换为不可变列表
scala> a.toList
res38: List[Int] = List(1, 2, 3, 4, 5, 6)
//7.将可变列表转换为数组
scala> a.toArray
res39: Array[Int] = Array(1, 2, 3, 4, 5, 6)

1.13.3 列表常用操作

以下是列表常用的操作:

  1. 判断列表是否为空(isEmpty
    image.png
  2. 拼接两个列表(++
    image.png
  3. 获取列表的首个元素(head)和剩余部分(tail)
    image.png
  4. 反转列表(reverse
    image.png
  5. 获取前缀(take)、获取后缀(drop
    image.png
  6. 扁平化(flaten)。扁平化表示将列表中的列表中的所有元素放到一个列表中。
    image.png
  7. 拉链(zip)和拉开(unzip)。拉链:使用 zip 将两个列表,组合成一个元素为元组的列表。拉开:将一个包含元组的列表,解开成包含两个列表的元组。
    image.png
  8. 转换字符串(toString
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
scala> a.toString
res52: String = List(1, 2, 3, 4)
  1. 生成字符串(mkString
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
scala> a.mkString
res53: String = 1234
scala> a.mkString(":")
res54: String = 1:2:3:4
  1. 并集(union)交集(intersect) 差集(diff
scala> val a1 = List(1,2,3,4)
a1: List[Int] = List(1, 2, 3, 4)
scala> val a2 = List(3,4,5,6)
a2: List[Int] = List(3, 4, 5, 6)
scala> a1.union(a2)
res55: List[Int] = List(1, 2, 3, 4, 3, 4, 5, 6)
scala> a1.union(a2).distinct
res56: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> a1.intersect(a2)
res57: List[Int] = List(3, 4)
scala> a1.diff(a2)
res58: List[Int] = List(1, 2)

1.14 Set

Set(集) 是代表没有重复元素的集合。Set 具备以下性质:

  1. 元素不重复。
  2. 不保证插入顺序。

和 List 正好相反,List:

  1. 元素可以重复。
  2. 保证插入顺序。

Scala 中的集也分为两种,一种是不可变集,另一种是可变集。

1.14.1 不可变集

语法格式如下: 创建一个空的不可变集,语法格式:

val/var 变量名 = Set[类型]()

给定元素来创建一个不可变集,语法格式:

val/var 变量名 = Set(元素1, 元素2, 元素3...)

示例代码如下:

scala> val a = Set[Int]()
a: scala.collection.immutable.Set[Int] = Set()
scala> val a = Set(1,1,3,2,5,9)
a: scala.collection.immutable.Set[Int] = Set(5, 1, 9, 2, 3)

基本操作

  1. 获取集的大小(size
  2. 遍历集(和遍历数组一致
  3. 添加一个元素,生成一个Set(+
  4. 拼接两个集,生成一个Set(++
  5. 拼接集和列表,生成一个Set(++

示例代码如下:

scala> val a = Set[Int]()
a: scala.collection.immutable.Set[Int] = Set()
scala> val a = Set(1,1,3,2,5,9)
a: scala.collection.immutable.Set[Int] = Set(5, 1, 9, 2, 3)
scala> val s = Set(1,1,2,3,4,5)
s: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)
scala> s.size
res59: Int = 5
scala> for(i <- s) print(i)
51234
scala> s - 1
res62: scala.collection.immutable.Set[Int] = Set(5, 2, 3, 4)
scala> s ++ Set(6,7,8)
res63: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 7, 3, 8, 4)
scala> s ++ List(6,7,8,9)
res64: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 9, 2, 7, 3, 8, 4)

1.14.2 可变集

可变集合不可变集的创建方式一致,只不过需要提前导入一个可变集类。手动导入:import scala.collection.mutable.Set。示例代码如下:

scala> import scala.collection.mutable.Set
import scala.collection.mutable.Set
scala> val a = Set(1,2,3,4)
a: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)
scala> a += 5
res65: a.type = Set(1, 5, 2, 3, 4)
scala> a -= 1
res66: a.type = Set(5, 2, 3, 4)

1.15 Map 对象

Map 可以称之为映射。它是由键值对组成的集合。在 Scala 中,Map 也分为不可变 Map 和可变 Map。

1.15.1 不可变 Map

语法格式如下:

val/var map = Map(键->值, 键->值, 键->值...)  // 推荐,可读性更好
val/var map = Map((键, 值), (键, 值), (键, 值), (键, 值)...)

示例代码如下:

scala> val map = Map("zhangsan"->30, "lisi"->40)
map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 30, lisi -> 40)
scala> val map = Map(("zhangsan", 30), ("lisi", 30))
map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 30, lisi -> 30)
scala> map("lisi")
res67: Int = 30

1.15.2 可变 Map

定义语法与不可变 Map 一致。但定义可变 Map 需要手动导入 import scala.collection.mutable.Map。示例代码如下:

scala> import scala.collection.mutable.Map
import scala.collection.mutable.Map
scala> val map = Map("zhangsan"->30, "lisi"->40)
map: scala.collection.mutable.Map[String,Int] = Map(lisi -> 40, zhangsan -> 30)
scala> map("zhangsan") = 20

1.15.3 Map 基本操作

基本操作如下:

  1. 获取值 (map(key))。
  2. 获取所有 key(map.keys)。
  3. 获取所有 value(map.values)。
  4. 遍历 map 集合。
  5. getOrElse。
  6. 增加 key,value 对。
  7. 删除 key。

示例代码如下:

scala> import scala.collection.mutable.Map
import scala.collection.mutable.Map
//1. 定义一个映射,包含以下学生姓名和年龄数据
scala> val map = Map("zhangsan"->30, "lisi"->40)
map: scala.collection.mutable.Map[String,Int] = Map(lisi -> 40, zhangsan -> 3
//2. 获取zhangsan的年龄
scala> map("zhangsan")
res69: Int = 30
//3. 获取所有的学生姓名
scala> map.keys
res70: Iterable[String] = Set(lisi, zhangsan)
//4. 获取所有的学生年龄
scala> map.values
res71: Iterable[Int] = HashMap(40, 30)
//5. 打印所有的学生姓名和年龄
scala> for((x,y) <- map) println(s"$x $y")
lisi 40
zhangsan 30
//6. 获取wangwu的年龄,如果wangwu不存在,则返回-1
scala> map.getOrElse("wangwu", -1)
res73: Int = -1
//7. 新增一个学生:wangwu, 35
scala>  map + ("wangwu"->35)
res74: scala.collection.mutable.Map[String,Int] = Map(lisi -> 40, zhangsan -> 30, wangwu -> 35)
//scala>  map + ("ppp" ->10, "iii" -> 9)
scala> map + (("ppp", 10), ("iii", 9))
res75: scala.collection.mutable.Map[String,Int] = Map(lisi -> 40, zhangsan -> 30, ppp -> 10, iii -> 9)
//8. 将lisi从可变映射中移除
scala> map - "lisi"
res77: scala.collection.mutable.Map[String,Int] = Map(zhangsan -> 30)

1.16 iterator 迭代器

Scala 针对每一类集合都提供了一个迭代器 (iterator) 用来迭代访问集合。

1.16.1 使用迭代器遍历集合

  1. 使用 iterator 方法可以从集合获取一个迭代器。
  2. 迭代器的两个基本操作。
  • hasNext——查询容器中是否有下一个元素
  • next——返回迭代器的下一个元素,如果没有,抛出 NoSuchElementException,每一个迭代器都是有状态的(只能用一次,内部指针只走一次,走到最后就结束了,不会再回到开头,除非你再取得一个新的迭代器)。
  1. 迭代完后保留在最后一个元素的位置。
  2. 再次使用则抛出 NoSuchElementException。
  3. 可以使用 while 或者 for 来逐个返回元素。

示例代码如下:

scala> val a = List(1,2,3,4,5)
a: List[Int] = List(1, 2, 3, 4, 5)
scala> val ite = a.iterator
ite: Iterator[Int] = <iterator>
scala> while(ite.hasNext){
     | println(ite.next)
     | }
1
2
3
4
5

使用 for 表达式和迭代器,遍历打印该列表,示例代码如下:

scala> val a = List(1,2,3,4,5)
a: List[Int] = List(1, 2, 3, 4, 5)
scala> for(i <- a) println(i)
1
2
3
4
5
相关文章
|
1月前
|
并行计算 前端开发 安全
Scala
Scala
14 0
|
Java 编译器 Scala
四天掌握Scala(2)
你好看官,里面请!今天笔者讲的是scala。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
110 1
四天掌握Scala(2)
|
SQL Java 大数据
四天掌握Scala(1)
你好看官,里面请!今天笔者讲的是scala。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
167 0
四天掌握Scala(1)
|
SQL 分布式计算 算法
四天掌握Scala(3)
你好看官,里面请!今天笔者讲的是scala。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
145 0
四天掌握Scala(3)
|
分布式计算 Scala Spark
scala中的self =>
scala中的self =>
154 0
|
Java Scala
【Scala】Scala之Numbers(二)
 前面已经学习了Scala中的String,接着学习Scala的Numbers。
154 0
【Scala】Scala之Numbers(二)
|
Java Scala
【Scala】Scala之Numbers(一)
 前面已经学习了Scala中的String,接着学习Scala的Numbers。
123 0
【Scala】Scala之Numbers(一)
|
Java Scala
Scala总结
1、Scala简介 2、Scala中运算符和流程控制 3、Scala中方法和函数 4、类和对象 5、数组和集合
186 0
|
分布式计算 JavaScript 前端开发
Scala 必知必会
Scala 必知必会 3
97 0
Scala 必知必会