Scala List与ListBuffer详解:可变与不可变列表的完整指南

0 阅读3分钟

一、List的定义和介绍

List是一种有序的数据结构,它是一种链表结构。在Scala中,List主要分为两种类型:不可变List和可变ListBuffer。

创建格式

  • 不可变List:
    val 列表名称 = List(element1, element2, ...)
    
  • 可变ListBuffer:
    import scala.collection.mutable.ListBuffer
    val 列表名称 = ListBuffer[元素类型](element1, element2, ...)
    

特点

  • 不可变List创建后元素不能修改
  • 可变ListBuffer可以修改元素

二、基本创建与区别示例

代码示例

package list

object list01 {
  def main(args: Array[String]): Unit = {
    // 1. 不可变List
    val list1 = List("湖北省", "浙江省")
    println(list1)
    
    // 2. 可变List
    val list2 = scala.collection.mutable.ListBuffer("湖北省", "浙江省")
    list2 += "北京市"
    println(list2)
  }
}

结果展示

List(湖北省, 浙江省)
ListBuffer(湖北省, 浙江省, 北京市)

代码分析

  1. 创建了一个不可变List list1,包含两个省份名称
  2. 创建了一个可变ListBuffer list2,初始包含两个省份名称
  3. 使用 += 操作符向 list2 添加了新元素"北京市"
  4. 不可变List创建后无法修改,而可变ListBuffer可以动态添加元素

三、可变List的常用操作

1. 添加元素

  • 在尾部添加:+=append()
  • 在头部添加:prepend()
  • 在指定位置添加:insert(位置, 元素)

2. 删除元素

  • 删除指定元素:-=
  • 删除指定位置元素:remove(位置)

3. 元素是否存在判断

使用 contains() 方法查询List中是否包含某个元素

4. 合并列表

使用 ++ 方法合并两个列表

5. List的遍历

  • 使用for循环遍历
  • 使用foreach方法遍历

代码示例

package list

object list02 {
  def main(args: Array[String]): Unit = {
    // 可变列表
    val list2 = scala.collection.mutable.ListBuffer("湖北省", "浙江省")
    
    // 1.1 在列表元素的尾部添加
    list2 += "北京市"
    
    // 1.2 在头部添加
    list2.prepend("潜江")
    
    // 1.3 在指定位置添加
    list2.insert(1, "湖南")
    println("添加元素后:" + list2)
    
    // 2. 删除
    list2 -= "湖北省"
    println("删除'湖北省'后:" + list2)
    
    // 3. 判断某个元素是否存在
    if (list2.contains("潜江")) {
      println("潜江在列表中存在")
    } else {
      println("潜江在列表中不存在")
    }
    
    // 4. 合并列表,列表中允许重复的元素存在
    val list3 = scala.collection.mutable.ListBuffer("湖北省", "浙江省")
    val list4 = scala.collection.mutable.ListBuffer("湖北省", "浙江省")
    val list5 = list3 ++ list4
    println("合并后的列表:" + list5)
    
    // 5.1 使用for循环遍历
    println("使用for循环遍历:")
    for (ele <- list2) {
      println(ele)
    }
    
    // 5.2 使用foreach方法遍历
    println("使用foreach方法遍历:")
    list2.foreach(ele => {
      println(ele)
    })
  }
}

结果展示

添加元素后:ListBuffer(潜江, 湖南, 湖北省, 浙江省, 北京市)
删除'湖北省'后:ListBuffer(潜江, 湖南, 浙江省, 北京市)
潜江在列表中存在
合并后的列表:ListBuffer(湖北省, 浙江省, 湖北省, 浙江省)
使用for循环遍历:
潜江
湖南
浙江省
北京市
使用foreach方法遍历:
潜江
湖南
浙江省
北京市

代码分析

  1. 创建可变ListBuffer并演示了三种添加元素的方式
  2. 展示了如何删除指定元素
  3. 使用contains方法判断元素是否存在
  4. 使用++操作符合并两个列表,允许重复元素
  5. 演示了两种遍历方式:for循环和foreach方法

四、不可变List的常用方法

1. 添加元素

  • 在尾部添加:appended(元素)
  • 在头部添加:prepended(元素)

2. 合并列表

  • 使用 ::: 方法
  • 使用 ++ 方法

注意: 不可变List的所有修改操作都会返回一个新的List,原List保持不变。

五、总结

通过本篇文章的学习,我们掌握了Scala中List的以下知识点:

  1. List的基本概念:Scala中有两种List,不可变List和可变ListBuffer
  2. 创建方式:不可变List使用List(),可变List使用ListBuffer()
  3. 常用操作
    • 添加元素:尾部添加、头部添加、指定位置添加
    • 删除元素:删除指定元素、删除指定位置元素
    • 查询元素:判断元素是否存在
    • 合并列表:使用++操作符
    • 遍历列表:for循环和foreach方法
  4. 不可变与可变的区别:不可变List修改操作返回新List,可变ListBuffer直接修改原List