scala之集合Collection篇

目录

Array

定义数组方式

常用方法

List

set

Map

Tuple(元组)

总结集合相关API


Array

1.Array: 长度不可变,内容可变

2.immutable:定长数组是Array,一经声明,数组长度不能更改。

3.mutalbe:变长数组是ArrayBuffer,长度可以变更(通过append方法追加)

4.操作数组通过下标操作,从0开始。不同于java的是:scala是(),java是[]

定义数组方式

val a1=Array(1,2,3,4)  //--声明定长数组       //> a1  : Array[Int] = Array(1, 2, 3, 4)
val a2:Array[Int]=Array(1,2,3,4)                //> a2  : Array[Int] = Array(1, 2, 3, 4)
val a3=new Array[Int](3)                        //> a3  : Array[Int] = Array(0, 0, 0)

常用方法

val a4=scala.collection.mutable.ArrayBuffer(1,2,3,4)  //--声明变长数组 > a4  : ArrayBuffer(1, 2, 3, 4)
a4.append(5)  //--变长数组追加元素
a1.apply(0)    //--通过下标操作数组    res0: Int = 1
a1(0)                //> res1: Int = 1
a1(0)=10   //--通过下标赋值
a1           //> res2: Array[Int] = Array(10, 2, 3, 4)
val r1=a1.take(2)  //--取出前n项元素,并返回到新数组    r1  : Array[Int] = Array(10, 2)
val r2=a1.takeRight(2)      //--取出后n项元素,并返回到新数组                       //> r2  : Array[Int] = Array(3, 4)
val r3=a1.drop(2)  //--去掉前n项元素,并将剩余元素返回到新数组  > r3  : Array[Int] = Array(3, 4)
val r4=a1.dropRight(2) //--去掉后n项元素,并将剩余元素返回到新数组     r4  : Array[Int] = Array(10, 2)
val r5=a1.head     //--取出数组头元素,有别于take(1)   > r5  : Int = 10
val r7=a1.last   //--取出数组尾元素,有别于takeRight(1)                                //> r7  : Int = 4
a1.max    //--最大值                                      //> res3: Int = 10
a1.min  //--最小值                                        //> res4: Int = 2
a1.sum   //--求和                                       //> res5: Int = 19
val r9=a1.mkString(",")     //--将数组中元素以指定的分隔符返回成一个字符串                     //> r9  : String = 10,2,3,4

val a5=Array(1,2,3)                             //> a5  : Array[Int] = Array(1, 2, 3)
val a6=Array(3,4,5)                             //> a6  : Array[Int] = Array(3, 4, 5)
val a7=Array(3,6,7)                             //> a7  : Array[Int] = Array(3, 6, 7) 
val r10=a5.intersect(a6).intersect(a7)  //>r10: Array(3)  取交集,并且把结果返回到新数组中,应用场景:比较文件数据的相同部分
val r11=a5.union(a6) //--取并集,并把结果返回到新数组                           //> r11  : Array[Int] = Array(1, 2, 3, 3, 4, 5)
val r12=a5.diff(a6) //--取差集,应用场景:比较文件数据之间相异的部分       //> r12  : Array[Int] = Array(1, 2)
a5.exists { x => x%2==0&&x>4 }   //--根据指定的匿名函数判断元素是否存在     //> res6: Boolean = false
a5.count { x => x%2==0 }   //--根据指定的匿名函数计数        //> res7: Int = 1
a5.length  //--返回数组长度     //> res8: Int = 3
a5.filter{x=>x>2}  //--根据指定的匿名函数过滤,并将结果返回新数组   //> res9: Array[Int] = Array(3)

val a8=Array("tom,23,M","rose,18,F","jary,30,M")  //> a8  : Array[String] = Array(tom,23,M, rose,18,F, jary,30,M)
  //--映射方法,将元素从一个形式映射(转换)到另外一个形式,无论如何转换,元素的个数不会改变
val a9=a8.map { x => x.split(",") }    //> a9  = Array(Array(tom, 23, M), Array(rose, 18, F), Array(jary, 30, M))

val a10=Array(4,1,2,3,5)                        //> a10  : Array[Int] = Array(4, 1, 2, 3, 5)
val a11=a10.sortBy{x=>x}  //--按照指定的匿名函数规则升序排序                      //> a11  : Array[Int] = Array(1, 2, 3, 4, 5)
val a12=a10.sortBy{x=> -x}   //--降序,注意前缀操作符加空格                   //> a12  : Array[Int] = Array(5, 4, 3, 2, 1)
a10.foreach{x=>println(x)}  //--根据指定的匿名函数遍历数组                    //> 4 1 2 3 5
a10.reduce{(a,b)=>a+b}    //--是一种迭代方法   > res12: Int = 15

flatten 扁平化操作
Array[Array[String]] = Array(Array("1", "2"), Array("4", "5"))
 扁平化操作后:
Array[String] = Array("1", "2", "4", "5")
flatMap=map + flatten

List

val l1=List(1,2,3,4)  //--声明定长List                           //> l1  : List[Int] = List(1, 2, 3, 4)
val l2=scala.collection.mutable.ListBuffer(1,2,3,4) //--声明变长List,ListBuffer[Int] = ListBuffer(1, 2, 3, 4)
val l3=ListBuffer(1,2,3,4)                      //> l3  : scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)
l1(0)    //--通过下标操作List                                       //> res0: Int = 1
val l4=0+:l1   //--基于一个定长List在左侧加元素,并返回新List     //> l4  : List[Int] = List(0, 1, 2, 3, 4)
val l5=l1:+(5)   //--基于一个定长List在右侧加元素,并返回新List                               //> l5  : List[Int] = List(1, 2, 3, 4, 5)
  //--类型转换
  val a1=l1.toArray                               //> a1  : Array[Int] = Array(1, 2, 3, 4)
  val i1=100                                      //> i1  : Int = 100
  val s1=i1.toString()                            //> s1  : String = 100
  
  val l6=List(1,2,3)                              //> l6  : List[Int] = List(1, 2, 3)
  val l7=List(3,4,5)                              //> l7  : List[Int] = List(3, 4, 5)
l6.toArray.intersect(l7).toList                 //> res1: List[Int] = List(3)
  
val l8=List(1,1,2,2,3)                          //> l8  : List[Int] = List(1, 1, 2, 2, 3)
l8.distinct                                     //> res2: List[Int] = List(1, 2, 3)                             

set

存储的元素是无序的,且里面的元素是没有重复的

val s1=Set(1,1,2,2,3)  //--声明定长Set                         //> s1  : scala.collection.immutable.Set[Int] = Set(1, 2, 3)
val s2=scala.collection.mutable.Set(1,2,3,4)   //--声明变长Set  //> s2  : scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)
val s3=Set(1,2,3)                               //> s3  : scala.collection.immutable.Set[Int] = Set(1, 2, 3)
val s4=Set(3,4,5)                               //> s4  : scala.collection.immutable.Set[Int] = Set(3, 4, 5)

//--取交集   s3&s4                     //> res0: scala.collection.immutable.Set[Int] = Set(3)
                   s3.intersect(s4)       //> res1: scala.collection.immutable.Set[Int] = Set(3)
//--取差集    s3&~s4                       //> res2: scala.collection.immutable.Set[Int] = Set(1, 2)
                   s3.diff(s4)                   //> res3: scala.collection.immutable.Set[Int] = Set(1, 2)
//--取并集    s3++s4                //> res4: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)
                   s3.union(s4)          //> res5: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)

Map

val m1=Map("tom"->23,"rose"->30,"jim"->18)    //--声明定长Map,> m1 = Map(tom -> 23, rose -> 30,jim -> 18)
val m2=scala.collection.mutable.Map("tom"->23,"rose"->30,"jim"->18) //--声明变长Map,可以追加kv对
m1.apply("tom")    ==m1("tom")      //--通过key取值,   res0: Int = 23
m1.get("tom").getOrElse(0)  //通过key取值,并将值返回到Some类型里,当操作的key不存在,返回指定的默认值                 
m1.keys.foreach{x=>println(x)}   //--获取map的所有key,并返回一个迭代器            //> tom rose jim
m1.values   //--获取map的所有value   
m2+=("jary"->35)  //--变长map追加kv对 ,
m1.filter{case(k,v)=>v>18}     //--根据指定的匿名函数过滤并返回新Map,掌握case(k,v)用法,= Map(tom -> 23, rose -> 30)
m1.map{case(k,v)=>(k,v+10)}   //> 人名不变,年龄+10, Map(tom -> 33, rose -> 40, jim -> 28)
m1.exists{case(k,v)=>v<18}      //--判断m1中是否存在未成年人     Boolean = false
m1.mapValues { x => x+10 }   //> //--此方法只要Map类型有,专门映射Map的value, Map(tom -> 33, rose -> 40 , jim -> 28)

Tuple(元组)

是最重要和最灵活的集合类型,元组中可以分任意类型的数据, 最多可以放22个
val t2=("hello",100,Array(1,2,3),List(4,5,6))   //声明了一个元组, (hello,100,Array(1, 2, 3),List(4, 5, 6))
t2._1    //--元组的取值方式: ._下标  (下标从1开始)     ,String = hello
t2._3(2)     //--操作t2,取出数字3       > res2: Int = 3

总结集合相关API:

aggregate()(seqOp, combOp) 对集合进行某种聚合操作
count(boolean) 返回是符合条件的元素个数
diff    某个集合和另外一个集合的差集
distinct 对集合中的元素进行去重
filter(boolean) 过滤出符合条件的元素集合
flatMap  对集合进行某种映射(map)操作,然后在进行扁平化操作(flatten)
flatten 扁平化操作
fold()() 折叠操作
foldLeft()() 从左到右折叠
foldRight()()
foreach(f: A => Unit) 遍历集合
groupBy(key) 按照key进行分组
grouped(Int) 将集合按照Int个数进行分组
head 获取集合中的头元素
indices 返回集合的角标范围
intersect 请求两个集合的交集
length 返回集合的元素个数
map 对集合进行某种映射操作
mkString 对集合进行格式化输出
nonEmpty 判断集合是否为空
reduce 聚合

reverse 将集合进行反转
size 返回集合的长度
slice(start, end) 截取集合的元素
sortBy(key) 集合按照某个key进行排序
sortWith(boolean) 将集合按照某种规则进行排序
sorted 集合按照升序排序
sum 对集合进行求和操作
tail 返回集合的尾部元素列表
zip 拉链操作 相同角标位置的元素组合到一起,返回一个新的集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值