1 列表
列表是scala中最重要的、也是最常用的数据结构。List具备以下性质:
- 可以保存重复的值
- 有先后顺序
在scala中,也有两种列表,一种是不可变列表、另一种是可变列表
1.1 定义
不可变列表就是列表的元素、长度都是不可变的。
语法
使用List(元素1, 元素2, 元素3, ...)
来创建一个不可变列表,语法格式:
val/var 变量名 = List(元素1, 元素2, 元素3...)
使用Nil
创建一个不可变的空列表
val/var 变量名 = Nil
使用::
方法创建一个不可变列表
val/var 变量名 = 元素1 :: 元素2 :: Nil
[TIP]
使用 拼接方式来创建列表,必须在最后添加一个Nil
1.1.1 示例一
创建一个不可变列表,存放以下几个元素(1,2,3,4)
参考代码
scala> val a = List(1,2,3,4) a: List[Int] = List(1, 2, 3, 4)
1.1.2 示例二
使用Nil创建一个不可变的空列表
参考代码
scala> val a = Nil a: scala.collection.immutable.Nil.type = List()
1.1.3 示例三
使用::
方法创建列表,包含-2、-1两个元素
参考代码
scala> val a = -2 :: -1 :: Nil a: List[Int] = List(-2, -1)
2 可变列表
可变列表就是列表的元素、长度都是可变的。
要使用可变列表,先要导入import scala.collection.mutable.ListBuffer
[NOTE]
- 可变集合都在
mutable
包中- 不可变集合都在
immutable
包中(默认导入)
2.1 定义
使用ListBuffer[元素类型]()创建空的可变列表,语法结构:
val/var 变量名 = ListBuffer[Int]()
使用ListBuffer(元素1, 元素2, 元素3…)创建可变列表,语法结构:
val/var 变量名 = ListBuffer(元素1,元素2,元素3...)
2.1.1 示例一
创建空的整形可变列表
参考代码
scala> val a = ListBuffer[Int]() a: scala.collection.mutable.ListBuffer[Int] = ListBuffer()
2.1.2 示例二
创建一个可变列表,包含以下元素:1,2,3,4
参考代码
scala> val a = ListBuffer(1,2,3,4) a: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)
2.2 可变列表操作
- 获取元素(使用括号访问
(索引值)
) - 添加元素(
+=
) - 追加一个列表(
++=
) - 更改元素(
使用括号获取元素,然后进行赋值
) - 删除元素(
-=
) - 转换为List(
toList
) - 转换为Array(
toArray
)
2.2.1 示例
- 定义一个可变列表包含以下元素:1,2,3
- 获取第一个元素
- 添加一个新的元素:4
- 追加一个列表,该列表包含以下元素:5,6,7
- 删除元素7
- 将可变列表转换为不可变列表
- 将可变列表转换为数组
参考代码
// 导入不可变列表 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) // 获取第一个元素 scala> a(0) res19: Int = 1 // 追加一个元素 scala> a += 4 res20: a.type = ListBuffer(1, 2, 3, 4) // 追加一个列表 scala> a ++= List(5,6,7) res21: a.type = ListBuffer(1, 2, 3, 4, 5, 6, 7) // 删除元素 scala> a -= 7 res22: a.type = ListBuffer(1, 2, 3, 4, 5, 6) // 转换为不可变列表 scala> a.toList res23: List[Int] = List(1, 2, 3, 4, 5, 6) // 转换为数组 scala> a.toArray res24: Array[Int] = Array(1, 2, 3, 4, 5, 6)
3 列表常用操作
以下是列表常用的操作
- 判断列表是否为空(
isEmpty
) - 拼接两个列表(
++
) - 获取列表的首个元素(
head
)和剩余部分(tail
) - 反转列表(
reverse
) - 获取前缀(
take
)、获取后缀(drop
) - 扁平化(
flaten
) - 拉链(
zip
)和拉开(unzip
) - 转换字符串(
toString
) - 生成字符串(
mkString
) - 并集(
union
) - 交集(
intersect
) - 差集(
diff
)
3.1 判断列表是否为空
示例
- 定义一个列表,包含以下元素:1,2,3,4
- 使用isEmpty判断列表是否为空
参考代码
scala> val a = List(1,2,3,4) a: List[Int] = List(1, 2, 3, 4) scala> a.isEmpty res51: Boolean = false
3.2 拼接两个列表
示例
- 有两个列表,分别包含以下元素1,2,3和4,5,6
- 使用
++
将两个列表拼接起来
参考代码
scala> val a = List(1,2,3) a: List[Int] = List(1, 2, 3) scala> val b = List(4,5,6) b: List[Int] = List(4, 5, 6) scala> a ++ b res52: List[Int] = List(1, 2, 3, 4, 5, 6)
3.3 获取列表的首个元素和剩余部分
示例
- 定义一个列表,包含以下几个元素:1,2,3
- 使用head方法,获取列表的首个元素
- 使用tail方法,获取除第一个元素以外的元素,它也是一个列表
参考代码
scala> val a = List(1,2,3) a: List[Int] = List(1, 2, 3) scala> a.head res4: Int = 1 scala> a.tail res5: List[Int] = List(2, 3)
3.4 反转列表
示例
- 定一个列表,包含以下元素:1,2,3
- 使用reverse方法将列表的元素反转
scala> val a = List(1,2,3) a: List[Int] = List(1, 2, 3) scala> a.reverse res6: List[Int] = List(3, 2, 1)
3.5 获取列表前缀和后缀
示例
- 定义一个列表,包含以下元素:1,2,3,4,5
- 使用take方法获取前缀(前三个元素):1,2, 3
- 使用drop方法获取后缀(除前三个以外的元素):4,5
参考代码
scala> val a = List(1,2,3,4,5) a: List[Int] = List(1, 2, 3, 4, 5) scala> a.take(3) res56: List[Int] = List(1, 2, 3) scala> a.drop(3) res60: List[Int] = List(4, 5)
3.6 扁平化(压平)
扁平化表示将列表中的列表中的所有元素放到一个列表中。
示例
- 有一个列表,列表中又包含三个列表,分别为:List(1,2)、List(3)、List(4,5)
- 使用flatten将这个列表转换为List(1,2,3,4,5)
参考代码
scala> val a = List(List(1,2), List(3), List(4,5)) a: List[List[Int]] = List(List(1, 2), List(3), List(4, 5)) scala> a.flatten res0: List[Int] = List(1, 2, 3, 4, 5)