(一)List 的定义和介绍
List 是一种有序的数据结构,它是一种链表结构。 [教师画图介绍链表]
[展示]List 创建格式
不可 变 List:
val 列表名称 = List(element1, element2,...)
可变 List : ListBuffer
import scala.collection.mutable.ListBuffer
val 列表名称 = ListBuffer[元素类型](element1, element2,...)
List 是一种有序的数据结构,它是一种链表结构
// 链表示意图: 头节点 → 节点1 → 节点2 → ... → 尾节点(Nil)
// 每个节点包含:数据 + 指向下一个节点的引用
// 不可变List:一旦创建,不能修改,只能创建新的列表
val 省份列表 = List("湖北省", "浙江省", "江苏省")
// 可变List:可以原地修改
import scala.collection.mutable.ListBuffer
val 可变省份列表 = ListBuffer[String]("湖北省", "浙江省")
(二)可变 ListBuffer 的常用方法
1. 添加元素
val list = ListBuffer("湖北", "浙江")
// 添加单个元素
list += "江苏" // 末尾添加
list.append("广东") // 末尾添加
list.prepend("北京") // 开头添加
// 添加多个元素
list ++= List("上海", "重庆") // 批量添加
list.insert(2, "河南") // 在索引2处插入
println(list) // ListBuffer(北京, 湖北, 河南, 浙江, 江苏, 广东, 上海, 重庆)
2. 删除元素
val list = ListBuffer("北京", "湖北", "河南", "浙江", "江苏")
// 删除指定元素
list -= "河南" // 删除第一个匹配项
list.remove(1) // 删除索引1的元素(湖北)
list.remove(0, 2) // 从索引0开始删除2个元素
// 批量删除
list --= List("江苏", "浙江") // 删除多个元素
// 删除满足条件的元素
list.filterInPlace(_ != "北京") // 原地过滤
println(list) // ListBuffer()
3. 元素是否存在
val list = ListBuffer("湖北", "浙江", "江苏")
// 检查元素
val 是否有湖北 = list.contains("湖北") // true
val 索引位置 = list.indexOf("浙江") // 1
val 最后一个索引 = list.lastIndexOf("江苏") // 2
// 检查条件
val 是否有长度大于2 = list.exists(_.length > 2) // false
val 是否全部长度大于1 = list.forall(_.length > 1) // true
4. 合并列表
val list1 = ListBuffer("湖北", "浙江")
val list2 = ListBuffer("江苏", "广东")
// 合并列表(修改原列表)
list1 ++= list2 // list1 变为 ListBuffer(湖北, 浙江, 江苏, 广东)
// 创建新列表
val 合并列表 = list1 ++ list2 // 不改变原列表
// 连接操作
val 连接结果 = list1.concat(list2) // 同 ++=
5. List 的遍历
val 省份列表 = ListBuffer("湖北", "浙江", "江苏", "广东")
// 1. for循环
for (省份 <- 省份列表) {
println(省份)
}
// 2. foreach方法
省份列表.foreach(println)
// 3. 带索引的遍历
for ((省份, 索引) <- 省份列表.zipWithIndex) {
println(s"第${索引 + 1}个省份:$省份")
}
// 4. 使用for推导式
val 带编号的列表 = for (省份 <- 省份列表) yield s"省份:$省份"