文章目录
概念
列表是scala中最重要的、也是最常用的数据结构。List具备以下性质:
- 可以保存重复的值
- 有先后顺序
在scala中,也有两种列表,一种是不可变列表、另一种是可变列表
不可变列表
概念
不可变列表就是列表的元素、长度都是不可变的。
定义
语法
//使用List(元素1, 元素2, 元素3, ...)来创建一个不可变列表,语法格式
val/var 变量名 = List(元素1, 元素2, 元素3...)
//使用Nil创建一个不可变的空列表
//使用 :: 拼接方式来创建列表,必须在最后添加一个 Nil
val/var 变量名 = 元素1 :: 元素2 :: Nil
代码示例
//创建一个不可变列表,存放以下几个元素(1,2,3,4)
val a = List(1,2,3,4)
//使用Nil创建一个不可变的空列表
val a = Nil
//使用 :: 方法创建列表,包含-2、-1两个元素
//完整写法
val d: List[Int] = -2 :: -1 :: Nil
//省略写法
val a = -2 :: -1 :: Nil
可变列表
概念
可变列表就是列表的元素、长度都是可变的。
要使用可变列表,先要导包
import scala.collection.mutable.ListBuffer
- 可变集合都在
mutable
包中- 不可变集合都在
immutable
包中(默认导入)
定义
语法格式
//使用ListBuffer[元素类型]()创建空的可变列表,语法结构
val/var 变量名 = ListBuffer[Int]()
//使用ListBuffer(元素1, 元素2, 元素3...)创建可变列表,语法结构
val/var 变量名 = ListBuffer(元素1,元素2,元素3...)
代码示例
//导包
import scala.collection.mutable.ListBuffer
//创建空的整形可变列表
val a = ListBuffer[Int]()
//创建一个可变列表,包含以下元素:1,2,3,4
val a = ListBuffer(1,2,3,4)
可变列表的操作
- 获取元素(使用括号访问
(索引值)
)- 添加元素(
+=
)- 追加一个列表(
++=
)- 更改元素(
使用括号获取元素,然后进行赋值
)- 删除元素(
-=
)- 转换为List(
toList
)- 转换为Array(
toArray
)
代码示例
//导包
import scala.collection.mutable.ListBuffer
//1. 定义一个可变列表包含以下元素:1,2,3
val a: ListBuffer[Int] = ListBuffer(1,2,3)
//2. 获取第一个元素
//方式一
a(0)
//方式二
a.head
//3. 添加一个新的元素:4
a += 4
//4. 追加一个列表,该列表包含以下元素:5,6,7
a ++= List(5,6,7)
//5. 删除元素7
a -= 7
//6. 将可变列表转换为不可变列表
a.toList
//7. 将可变列表转换为数组
a.toArray
列表常用的操作
- 判断列表是否为空(
isEmpty
)- 拼接两个列表(
++
)- 获取列表的首个元素(
head
)和剩余部分(tail
)- 反转列表(
reverse
)- 获取前缀(
take
)、获取后缀(drop
)- 扁平化(
flaten
)- 拉链(
zip
)和拉开(unzip
)- 转换字符串(
toString
)- 生成字符串(
mkString
)- 并集(
union
)- 交集(
intersect
)- 差集(
diff
)
判断列表是否为空
代码示例
//定义一个列表,包含以下元素:1,2,3,4
val a = List(1,2,3,4)
//判空
a.isEmpty
拼接两个列表
代码示例
//定义列表一
val a = List(1,2,3)
//定义列表二
val b = List(4,5,6)
//拼接
a ++ b
获取列表的首个元素和剩余部分
代码示例
//定义一个列表
val a = List(1,2,3)
//获取首个元素
a.head
//获取剩余部分
a.tail
反转列表
代码示例
//定一个列表,包含以下元素:1,2,3
val a = List(1,2,3)
//反转
a.reverse
获取列表前缀和后缀
代码示例
//定一个列表,包含以下元素:1,2,3,4,5
val a = List(1,2,3,4,5)
//使用take方法获取前缀(前三个元素):1,2, 3
a.take(3)
//使用drop方法获取后缀(除前三个以外的元素):4,5
a.drop(3)
扁平化(压平)
扁平化表示将列表中的列表中的所有元素放到一个列表中。
代码示例
//有一个列表,列表中又包含三个列表,分别为:List(1,2)、List(3)、List(4,5)
val a = List(List(1,2), List(3), List(4,5))
//使用flatten将这个列表转换为List(1,2,3,4,5)
a.flatten
转换字符串
toString方法可以返回List中的所有元素
代码示例
//定义一个列表,包含以下元素:1,2,3,4
val a = List(1,2,3,4)
//使用toString输出该列表的元素
println(a.toString)
生成字符串
mkString方法,可以将元素以分隔符拼接起来。默认没有分隔符
代码示例
//定义一个列表,包含以下元素1,2,3,4
val a = List(1,2,3,4)
//使用mkString,用冒号将元素都拼接起来
a.mkString(":")
并集
union表示对两个列表取并集,不去重
代码示例
// 定义第一个列表,包含以下元素:1,2,3,4
val a = List(1,2,3,4)
// 定义第二个列表,包含以下元素:3,4,5,6
val b = List(3,4,5,6)
// 使用union操作,获取这两个列表的并集
a.union(b)
// 使用distinct操作,去除重复的元素
a.union(b).distinct
交集
intersect表示对两个列表取交集
代码示例
// 定义第一个列表,包含以下元素:1,2,3,4
val a1 = List(1,2,3,4)
// 定义第二个列表,包含以下元素:3,4,5,6
val a2 = List(3,4,5,6)
// 使用intersect操作,获取这两个列表的交集
a1.intersect(a2)
差集
diff表示对两个列表取差集,例如: a1.diff(a2),表示获取a1在a2中不存在的元素
代码示例
//定义第一个列表,包含以下元素:1,2,3,4
val a1 = List(1,2,3,4)
//定义第二个列表,包含以下元素:3,4,5,6
val a2 = List(3,4,5,6)
//使用diff获取这两个列表的差集
a1.diff(a2)