Scala的List概述
Scala中的List与Java中的完全不同它是基于链表实现的并且是一个不可变的集合,无论大小还是元素,都是不可变的。由于List的这种特性,它在Scala中的大部分操作是基于递归进行的。List与栈类似,也是后进先出的数据结构。
————Scala的List的构建————
在 Scala中可以通过Nil和:: 方式构建List。Nil表示空,相当于List(),即List集合中没有任何元素。::表示添加的意思,与堆栈的push有些类似。定义List(1,2,3,4)的方式相当于1::2::3::Nil。在集合中添加多个集合元素使用:::方式。
例如 List(1,2)=11,List(3,4)=12,结合这两个集合可以使用11:::12=(1,2,3,4)。
————Scala 的 List 的类型————
定义 List 的类型方式为List[T],T表示数据类型,指定List集合中只能存放T类型的元素。
例如 List[String]表示List集合中只可以存放String类型的元素。
————Scala 的 List 对应的懒加载集合————
Stream 类似于之前介绍的view,只是view适用于所有集合,而Stream相当于List集合的懒加载形式。
例如,定义一个Stream,Stream(1,2,3)等价于1#::2#::3::Stream.empty。当对 Stream 进行转换操作时,不会立即求值。当强制操作时才会触发求值操作。
————Scala 的 List 的可变————
List是一个不可变的集合,想要获取可变的序列就需要Listbuffer,List与Listbuffer之间相互对应。通过-=或+=方式删除或添加元素,还可以调用remove 方法移除元素。Listbuffer可以通过索引方式 赋值,而List不可以。
Scala的List的基本操作
List的基本操作中/:或:\的形式称为折叠方法,也是大部分集合都有的一种方法。
/:称为左行代折叠
:\称为右折叠
左折叠运算由初始值、操作符、List 和操作组成,即(z/:List)(op)等价于op(op(op(z,a),b),c)。
右折叠是 List 在前,即(List(a,b,e):lz)(op)等价于op(a,p(b,op(c,z)))。
//List:列表
//分类:可变 与 不可变(默认的)
import scala.collection.mutable.ListBuffer
object Test26 {
//def main(args: Array[String]): Unit = {
//1.建立一个不可变的列表
val l1=List(1,2,3)
//2.输出 第1个。 下标从0开始
println(l1(0))
//3.不可变 l1(0)=100写法是错误的!!!
// l1(0)=100
//4.添加
val l2=l1.prepended(0) //头部添加
val l3=l1.appended(100) //尾部添加
//5.删除 -- 不行!
// val l4=l1.re
// println(l1)
//}
def main(args: Array[String]): Unit = {
//1.建立一个可变的列表 ListBuffer
val l1=ListBuffer(1,2,3)
//2.输出 第1个元素
println(l1(0))
//3.直接修改
l1(0)=100
//4.添加 +=
l1+=4 //在尾部添加
l1.prepend(-1) //在头部添加
l1.insert(2,150) //在指定位置添加。把2这个位置上的元素改成150,其他向后边移动
//5.删除 -=
l1-=150 //删除指定元素
l1.remove(0) //删除指定位置上的元素
//6.判断元素是否存在
val rs=l1.contains(21) //判断元素2是否在list中
println(s"元素2是否在List中存在?:$rs")
//7.合并List,把多个列表元素合并到一个列表
val l2=ListBuffer(10,20)
val l3=l1++l2 //把 l1 和 l2 中的内容合并到l3中
println(l3)
//8.遍历输出
for (i<-l3){
println(i)
}
println("-"*20)
l3.foreach(println)
}
}