list2

2 阅读2分钟

(一)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"省份:$省份"