总结一下Scala中所有集合和基础用法

目录

概述

Seq集合

不可变集合List

可变集合ListBuffer

可变集合ListBuffer和不可变结合List相互转换

Set集合

不可变Set集合

可变Set集合

Map集合

不可变Map

可变Map

数组

不可变数组Array

可变数组ArrayBuffer

可变数组和不可变数组转换

集合常用方法

元组

队列


概述

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值