4. Scala中的集合

第 16、17、22、24、25 章

1.

2. 列表

2.1 列表的声明

注意点:

  • 同一个列表的所有元素都必须是相同的类型
  • Scala的列表类型是协变的,对每一组类型S和T,如果S是T的子类型,那么List[S]就是List[T]的子类型
  • 空列表的类型为List[Nothing]。在类继承关系中,Nothing是底类型,所以对于任何T而言,List[Nothing]都是List[T]的子类型
  • 所有的列表都构建自两个基础的构建单元 :Nil::。Nil表示空列表,::表示在列表前追加元素。

列表定义语法:

val fruit1:List[String] = List("apple","orange","pear")
// 也可以这样定义
val fruit2:List[String] = "apple"::("orange"::("pear"::Nil))
val fruit3 = "apple"::"orange"::"pear"::Nil
// 空列表的定义
val empty01 = List()
val empty02 = Nil

列表与数组的区别:

  • 列表是不可变的,列表的元素不能通过赋值改变
  • 列表的结构是递归的,即链表。而数组是平的
2.2 列表的基本操作
操作 说明
head 返回列表的第一个元素
tail 返回列表中除第一个元素之外的所有元素
isEmpty 返回列表是否为空列表
::: :::接收两个列表参数作为操作元形成一个新列表
last 返回(非空)列表的最后一个元素
init 返回除了最后一个元素之外剩余的部分

head、tail、last、init用于空列表会报错

2.3 列表模式

列表也可以用模式匹配解开,列表模式可以逐一对应到列表表达式。
下面两种匹配方式略有差别

val fruit1:List[String] = List("apple","orange","pear")
val List(a1, b1, c1) = fruit1
println(s"a:$a1, b:$b1, c:$c1")    // a:apple, b:orange, c:pear
val a2::b2::c2 = fruit1
println(s"a:$a2, b:$b2, c:$c2")    // a:apple, b:orange, c:List(pear)
发布了8 篇原创文章 · 获赞 0 · 访问量 106

猜你喜欢

转载自blog.csdn.net/qq_42994084/article/details/104191693