Scala中的List和ListBuffer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhoushuilin/article/details/81020605
Scala中的List和ListBuffer


我们之前已经讲解了Scala中的数组,我们知道了数组就是一个容器,能够存储相同的数据类型的数据。
那今天我们要讲的一个技术呢,和Array有点像,但是也有一些区别。


我们来看一下List和ListBuffer , List和Array一样,只能存储同一种数据类型的元素,但是呢,和Array也有不一样的地方,
Array的元素内容是可以变的,但是List的元素内容一旦初始化完成,则不可变了。
那我们直接上代码来看一下:


//首先我们来定义一个List , []指定的是泛型的类型,也就是说存储的元素的类型
val list1 = List[String]("a","b")


//访问元素内容
list1(0)
list1(1)
list1(2)


//循环最适合干上面的活
for(l <- list1){
println(l)
}


//通过list的map方法可以做遍历, 也就是map方法会去获取每一行数据进行处理
list1.map(println(_))


那如果说数据有误怎么进行修改呢,我之前学Array的时候,通过以下方式修改数据,也就是从新赋值
list1(0) ='c'  //这句话编译不报错,但是运行的时候,就报错了,为啥会报错呢? Scala中的List是不可变的,不仅仅长度不可变,
而且元素的内容一旦初始化完成后,也不可以变, 这个是和数组的最大区别,Array虽然长度不能变化,但是元素内容是可以变化的


所以,由于List本身一旦初始化完成后就固定不变了,所以List本身不能够在插入数据,修改数据和删除数据, 只能是你初始化完成数据后,
对数据进行遍历


但是,List本身布能变化,我能在这个基础上面加一个元素,再产生一个新的List吗? 答案是可以的, 那怎么做? 我们直接看代码
"c"+:list1
这个地方有一个注意的地方,通过这个方法来做的话,顺序不要变化,也就是说你要新加的元素放前面


那除了这种方式,其实还可以通过::方法, 这个也是在list开头加上元素,顺序也不能变化
"rr"::list1


那如果说你要在List的后面加一个元素,并且产生一个新的List呢?通过如下方式:
list1:+"cc"


那如何删除掉一个元素,产生一个新的List呢?
list1.drop(1) 


那也就是说,我们所谓的新增,删除,这些操作,其实最终都是产生一个新的元素




//在list开头加一个元素,并且产生一个新的List
def +:(elem: A): List[A]


//在列表开头添加元素
def ::(x: A): List[A]


//在列表开头添加指定列表的元素
def :::(prefix: List[A]): List[A]


//在列表后面添加元素,并且产生一个新的元素
def :+(elem: A): List[A]


//将列表的所有元素添加到 StringBuilder , 不指定分隔符
def addString(b: StringBuilder): StringBuilder


//将列表的所有元素添加到 StringBuilder,并指定分隔符
def addString(b: StringBuilder, sep: String): StringBuilder


//检测列表中是否包含指定的元素
def contains(elem: Any): Boolean


//去除列表的重复元素,并返回新列表
def distinct: List[A]


//删除前n个元素,并返回新列表
def drop(n: Int): List[A]


//判断列表中指定条件的元素是否存在。
def exists(p: (A) => Boolean): Boolean


//过滤出指定的元素
def filter(p: (A) => Boolean): List[A]


//从指定位置 from 开始查找元素第一次出现的位置
def indexOf(elem: A): Int


//计算多个集合的交集
def intersect(that: Seq[A]): List[A]


//检测列表是否为空
def isEmpty: Boolean


//返回列表长度
def length: Int


//通过给定的函数将所有元素重新计算
def map[B](f: (A) => B): List[B]


//列表所有元素作为字符串显示
def mkString: String


//列表反转
def reverse: List[A]


//列表转换为数组
def toArray: Array[A]


//返回缓冲区,包含了列表的所有元素
def toBuffer[B >: A]: Buffer[B]


//List 转换为 Map
def toMap[T, U]: Map[T, U]


//List 转换为 Seq
def toSeq: Seq[A]


//List 转换为 Set
def toSet[B >: A]: Set[B]


//列表转换为字符串
def toString(): String




ListBuffer 其实理解为可变的List,Array中有ArrayBuffer , List有ListBuffer , 所以这个好理解了吧


ListBuffer 因为是可变的,所以可以直接新增元素, 通过append方法插入新的元素


//插入新的元素
+=


append


++=合并一个非键值对容器的元素到当前ListBuffer中


//遍历ListBuffer
map 


foreach


for




//赋值或者修改元素
listbuff(0)


//删除元素,当前ListBuffer变化,不产生新的ListBuffer
remove


-=


//删除元素,产生新的ListBuffer
drop


//去重
distinct




//

猜你喜欢

转载自blog.csdn.net/zhoushuilin/article/details/81020605