Scala 之 List 与 ListBuffer 入门

本文深入探讨Scala中的List特性,包括其不可变性、创建方式、元素访问及追加操作,对比Java List并介绍ListBuffer的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scala的List

Scala 中的 List 和 Java List 不一样,在 Java 中 List 是一个接口,真正存放数据是 ArrayList,而 Scala 的 List 可以直接存放数据,就是一个object,默认情况下 Scala 的 List 是不可变的,List 属于序列 Seq.

val List = scala.collection.immutable.List
object List extends SeqFactory[List]
创建 List
object ListDemo01 {
  def main(args: Array[String]): Unit = {
    val list01 = List(1, 2, 3) //创建时,直接分配元素 println(list01)
    val list02 = Nil //空集合 List()
    println(list02)
  }
}
说明
  1. List默认为不可变的集合
  2. List 在 scala 包对象声明的,因此不需要引入其它包也可以使用
    val List = scala.collection.immutable.List
  3. List 中可以放任何数据类型,比如 arr1 的类型为 List[Any]
  4. 如果希望得到一个空列表,可以使用 Nil 对象, 在 scala 包对象声明的,因此不需要引入其它包也可以使用
    val Nil = scala.collection.immutable.Nil
访问 List
//访问 List 的元素
val value1 = list01(1) // 1 是索引,表示取出第 2 个元素
List 元素的追加(注意: 所有的追加都是返回新的List, 因为List 是 immutable):
  1. 在List最后追加数据:
println("-------------list 追加元素后的效果-----------------")
//通过 :+ 和 +: 给 list 追加元素(本身的集合并没有变化)
var list1 = List(1, 2, 3, "abc")
// :+运算符表示在列表的最后增加数据
val list2 = list1 :+ 4 // (1,2,3,"abc", 4)
println(list1) //list1 没有变化 (1, 2, 3, "abc"),说明 list1 还是不可变 
println(list2) //新的列表结果是 [1, 2, 3, "abc", 4]
val list3 = 10 +: list1 // (10,1, 2, 3, "abc") 
println("list3=" + list3)
  1. 在List前面追加数据:
    运算规则: 从右到左

::演示(List作为整体追加):

val list4 = List(1, 2, 3, "abc")
//说明 val list5=4::5::6::list4::Nil 步骤 
//1. List()
//2. List(List(1, 2, 3, "abc"))
//3. List(6,List(1, 2, 3, "abc"))
//4. List(5,6,List(1, 2, 3, "abc"))
//5. List(4,5,6,List(1, 2, 3, "abc"))
val list5 = 4 :: 5 :: 6 :: list4 :: Nil 
println("list5=" + list5)

:::演示(List拆开追加):

//说明 val list6=4::5::6::list4:::Nil 步骤 
//1. List()
//2. List(1, 2, 3, "abc")
//3. List(6,1, 2, 3, "abc")
//4. List(5,6,1, 2, 3, "abc")
//5. List(4,5,6,1, 2, 3, "abc")
val list6 = 4 :: 5 :: 6 :: list4 ::: Nil 
println("list6=" + list6)

Scala 的 ListBuffer:

ListBuffer 是可变的 list 集合,可以添加,删除元素,ListBuffer 属于序列, 追一下继承关系即可

Seq var listBuffer = ListBuffer(1,2)
ListBuffer操作相对简单:
import scala.collection.mutable.ListBuffer

object ListBufferDemo01 {
  def main(args: Array[String]): Unit = {
    //创建 ListBuffer
    val lst0 = ListBuffer[Int](1, 2, 3)
    //如何访问
    println("lst0(2)=" + lst0(2)) // 输出 lst0(2)= 3
    for (item <- lst0) { // 遍历,是有序
      println("item=" + item)
    }
    //动态的增加元素,lst1 就会变化, 增加一个一个的元素
    val lst1 = new ListBuffer[Int] //空的 ListBuffer
    lst1 += 4 // lst1 (4)
    lst1.append(5) // list1(4,5)
    //
    lst0 ++= lst1 // lst0 (1, 2, 3,4,5)
    println("lst0=" + lst0)
    val lst2 = lst0 ++ lst1 // lst2(1, 2, 3,4,5,4,5)
    println("lst2=" + lst2)
    val lst3 = lst0 :+ 5 // lst0 不变 lst3(1, 2, 3,4,5,5)
    println("lst3=" + lst3)
    println("=====删除=======")
    println("lst1=" + lst1)
    lst1.remove(1) // 表示将下标为 1 的元素删除
    for (item <- lst1) {
      println("item=" + item) //4
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静谧之心

感谢您的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值