object List01 {
def main(args: Array[String]): Unit = {
val list1 = List("湖北省", "浙江省")
println("不可变List: " + list1)
val list1Updated = list1 :+ "北京市"
println("原List不变: " + list1)
println("新的List: " + list1Updated)
val list2 = scala.collection.mutable.ListBuffer("湖北省", "浙江省")
list2 += "北京市"
println("可变ListBuffer: " + list2)
list2.append("上海市")
println("添加上海市后: " + list2)
list2.prepend("广东省")
println("添加到头部后: " + list2)
list2.insert(2, "江苏省")
println("插入江苏省到第3个位置后: " + list2)
list2 -= "浙江省"
println("删除浙江省后: " + list2)
list2.remove(0)
println("删除第一个元素后: " + list2)
println("\n不可变List的操作:")
val provinces = List("湖北", "浙江", "北京", "上海")
println("第一个元素: " + provinces.head)
println("除第一个外的其他元素: " + provinces.tail)
println("最后一个元素: " + provinces.last)
println("除最后一个外的其他元素: " + provinces.init)
val moreProvinces = List("广东", "江苏")
val allProvinces = provinces ::: moreProvinces
println("连接两个List: " + allProvinces)
println("遍历List:")
provinces.foreach(println)
val provinceLengths = provinces.map(_.length)
println("各省名称长度: " + provinceLengths)
}
}
主要区别:
不可变List (scala.collection.immutable.List)
- 默认导入,可以直接使用
List
- 不可修改:所有修改操作都会返回一个新的List
- 线程安全:因为不可变
- 常用操作:
::, :::, :+, +:
可变ListBuffer (scala.collection.mutable.ListBuffer)
- 需要显式导入:
import scala.collection.mutable.ListBuffer
- 可以修改:支持原地修改操作
- 性能优势:频繁修改时效率更高
- 常用操作:
+=, -=, append, prepend, insert, remove
使用建议:
- 优先使用不可变List:函数式编程的最佳实践
- 仅在需要频繁修改时使用ListBuffer:如构建大列表
- ListBuffer可以转换为List:
listBuffer.toList