目录
概述
Scala的集合类有三大类:序列Seq、集合Set、映射Map,所有的集合都扩展自Iterable特质。对于几乎所有的集合类,Scala都同时提供了可变和不可变的版本。
可变集合:可以对原集合进行修改、添加、删除等操作。
不可变集合:可以对集合进行操作但返回的是一个新的集合,原集合不会发生改变。
对于可变和不可变的集合,一般以集合的所在的包名进行区分,如下图
scala.collection.immutable(不可变)

scala.collection.mutable(可变)

Seq集合
Scala提供了Seq集合的数据结构,特征是数据有序(元素插入和取出的顺序是一致的),并且可以存放重复元素,应用的多的主要是不可变List集合和可变ListBuffer集合
不可变集合List
val list = List(1, 2, 3, 4)
//向集合的尾部添加元素 list.:+(5)简写为 list :+ 5
val intsList: List[Int] = list :+ 5 //List(1, 2, 3, 4 ,5)
println(list eq intsList) //false
//向集合的头部添加元素 list.+:(5) 不能简写为list +:5 只能换种写 法5+:list
val intsList1: List[Int] = list.+:(5) //List(5, 1,2, 3, 4)
val intsList2: List[Int] = 5 +: list //List(5, 1,2, 3, 4)
//Nil表示的是一个空的List集合
println(Nil) //List()
//:: 添加元素使用
//val intsList3:List[Int] = 1 :: 2 :: 3//这样写不识别
val intsList3: List[Int] = 1 :: 2 :: 3 :: Nil //这样写能识别
println("intsList3:" + intsList3) //List(1, 2, 3)
//:: Nil 将两组"::"之间的内容作为一个元素添加
val list2 = List(5, 6, 7, 8)
val intsList4: List[Any] = 1 :: 2 :: 3 :: list2 :: Nil //List(1, 2, 3, List(5, 6, 7, 8))
// 三个冒号 ::: Nil 将两组"::"之间的集合中的每一个元素分别作为一个元素添加
val intsList5: List[Any] = 1 :: 2 :: 3 :: list2 ::: Nil //List(1, 2,3, 5, 6, 7, 8)
//数据有序(插入有序),元素可以重复
val intsList6 = List(1, 5, 3, 6, 5) //List(1, 5, 3, 6, 5)
//take(n:Int) 从集合中copy n个元素(从前往后)来组成一个新的集合返回
println(intsList6.take(3)) //List(1, 5, 3)
//drop(n:Int) 去除前n个元素
val intsList7: List[Int] = intsList6.drop(2) //List(3, 6, 5)
可变集合ListBuffer
//TODO 1.实例化对象
//val names = new ListBuffer[String]()//使用构造方法
val names = ListBuffer[String]() //使用apply方法
//TODO 2.添加数据
names.append("张三")
names.append("李四")
//TODO 3.输出
println(names) //ListBuffer(张三, 李四)
//TODO 4.修改数据
names.update(1, "王五") //ListBuffer(张三, 王五)
//names.updated(...)修改指定下标对应的数据,names 集合中的元素不变 ,修改后产生一个新的集合
val names1: ListBuffer[String] = names.updated(1, "刘六")
println(names) //ListBuffer(张三, 王五)
println(names1) //ListBuffer(张三, 刘六)
//TODO 5.删除指定下标对应的元素
names.remove(1)
println(names) //ListBuffer(张三)
//TODO 6. 添加元素
names.append("老张","老王")
//TODO 6.删除从指定下标开始,向后删除指定个数的元素
println("删除前,name:"+names) //删除前,name:ListBuffer(张三, 老张, 老王)
names.remove(1,2)
println("删除后,name:"+names)// 删除后,name:ListBuffer(张三)
可变集合ListBuffer和不可变结合List相互转换
//TODO 1.实例化一个可变集合
val listBuffer: ListBuffer[Int] = ListBuffer(3, 2, 1)
println(listBuffer) //ListBuffer(3, 2, 1)
//TODO 2.将可变集合转换为不可变即可
val list: List[Int] = listBuffer.toList
println(list) //List(3, 2, 1)
val seq: Seq[Int] = listBuffer.toSeq
println(seq) //List(3, 2, 1)
//TODO 3.将不可变集合转换为可变集合
val buffer: mutable.Buffer[Int] = list.toBuffer
println(buffer) //ArrayBuffer(3, 2, 1)
bu


2471

被折叠的 条评论
为什么被折叠?



