-------------------集合-----------------
scala集合有两种类型:可变mutable
不可变Immutable
val b = List(2,4,6)
不可变集合:内容不可变(数组内容可变改)
长度不可变
可变集合:
注意:需要导包
import scala.collection.mutable._
val buff = ArrayBuffer(2,3,4)
内容可变:buff(1) = 300
长度可变:buff += 200
--------------------长度可变的数组-------------------
创建长度可变数组:
val ab = scala.collection.mutable.ArrayBuffer(2,3,4)
长度可变:
ab += 440
-------------------Seq序列-----------------------------
不可变的序列
在scala中列表要么为空(Nil表示空列表)
head元素上加上一个tail列表
head:取头元素
tail:取尾元素(除了头全是尾)
5::Nil 空列表的头加入一个元素
1::2::3::Nil 空列表前加入三个元素1,2,3
scala> 1::2::3::Nil
res55: List[Int] = List(1, 2, 3)
scala> res55.head
res56: Int = 1
scala> res55.tail
res57: List[Int] = List(2, 3)
+ 字符串的拼接
++ 两个集合相加
++: 合并集合
.+: 头部追加元素
:+ 尾部追加元素
::: 两个集合相加
count 统计个数
filter 过滤
sortBy 排序
sortWith 比较排序
scala> val ll = List(("a",1),("b",23),("c",5))
ll: List[(String, Int)] = List((a,1), (b,23), (c,5))
scala> ll.sortWith((x,y)=>x._2>y._2 )
res61: List[(String, Int)] = List((b,23), (c,5), (a,1))
grouped 分组
scala> ll.grouped(2).toList
res13: List[List[(String, Int)]] = List(List((a,2), (b,2)), List((c,3), (d,7)))
2个为一组
fold 折叠
scala> ll.fold(0)((x,y) => (x+y))
res9: Int = 6
scala> ll.fold(2)((x,y) => (x+y))
res10: Int = 8
scala> ll.fold(2)((x,y) => (x-y))
res11: Int = -4
foldLeft 左折叠
foldRight 右折叠
scala> val ll = List(1,2,3)
ll: List[Int] = List(1, 2, 3)
scala> ll.foldRight(0)((x,y) => (x-y))
res16: Int = 2
scala> (1-(2-(3-0)))
res17: Int = 2
scala> ll.foldLeft(0)(_-_)
res18: Int = -6
scala> (((0-1)-2)-3)
res20: Int = -6
reduce 聚合
scala> ll
res21: List[Int] = List(1, 2, 3)
scala> ll.reduce(_+_)
res22: Int = 6
aggregate 先局部聚合再全局聚合
zip 拉链
sum 求和
Set
无序的,不重复的集合
Set不可变的集合
val l5 = collection.mutable.HashSet(2,3,4)
HashSet可变的集合
remove 删除元素
-= 删除元素
++ 集合相加
++= 相加并赋值
Map
不可变Map:val m = Map[String,Int]("hello"->2,"rebba"->8)
可变Map:
getOrElse:如果有值返回值,没有返回默认值
元祖tuple
元祖中可以是任意元素
val t = (2,true,“hunter”,Unit)
取元素:t._1
对偶元祖:有两个元素的元祖
scala> t
res31: Array[(String, Int)] = Array((ycf,12), (aa,18))
scala> t.foldLeft(0)(_+_._2)
res32: Int = 30
简单来说,
Seq是列表,适合存有序重复数据,进行快速插入/删除元素等场景
Set是集合,适合存无序非重复数据,进行快速查找海量元素的等场景
总之,最大的区别不在语言实现上,而是数据结构的使用上。