Scala集合

1、数组Array

  • 包含的元素必须相同
  • 直接创建Array[String](“s1”,”s2”,”s3”)
  • 创建数组:new Array[Int](10)
  • 赋值:arr(0) = xxx
  • Array.concate:合并数组
  • Array.fill(5)(“appke”):创建初始值的定长数组
  • Any 所有类型的父类型
/**
  * 创建数组两种方式:
  * 1.直接Array
  * 2.new Array[String](3)
  */
// 创建String 类型的数组,直接赋值
val arr2 = Array[String]("s100","s200","s300")

// 创建类型为Int 长度为3的数组
val arr1 = new Array[Int](3)
// 赋值
arr1(0) = 100
arr1(1) = 200
arr1(2) = 300

遍历数组

// 遍历两种方式
for(i <- arr1){
   println(i)
}
arr1.foreach(i => {
   println(i)
})
    
for(s <- arr2){
   println(s)
}
arr2.foreach { 
   x => println(x) 
}

创建二维数组和遍历

val arr3 = new Array[Array[String]](3)
arr3(0)=Array("1","2","3")
arr3(1)=Array("4","5","6")
arr3(2)=Array("7","8","9")
for(i <- 0 until arr3.length){
   for(j <- 0 until arr3(i).length){
      print(arr3(i)(j)+"    ")
   }
   println()
}
    
var count = 0
for(arr <- arr3 ;i <- arr){
   if(count%3 == 0){
      println()
   }
   print(i+"    ")
   count +=1 
}
    
arr3.foreach(arr  => {
   println("***********")
   arr.foreach(println)
})

val arr4 = Array[Array[Int]](Array(1,2,3),Array(4,5,6))
arr4.foreach(arr => {
   arr.foreach(i => {
      println(i)
   })
})

println("-------")
for(arr <- arr4;i <- arr){
   println(i)
}

2、list

  • 有序可重复,元素类型可以不同
  • val list = List(1,2,3,4)
  • Nil长度为 0 的list
  • filter:过滤元素
  • count:计算符合条件的元素个数
  • map:对元素操作,来1个数据出1个数据
  • flatmap :压扁扁平,先mapflat
// 创建
val list = List(1,2,3,4,5)

// 遍历
list.foreach { x => println(x)}
//    list.foreach { println}
// filter
val list1  = list.filter { x => x>3 }
list1.foreach { println}

// count
val value = list1.count { x => x>3 }
println(value)
    
// map
// 来1个String,出1个String
val nameList = List("hello appke", "hello xasxt", "hello scala")
val mapResult:List[Array[String]] = nameList.map(x =>{ x.split(" ") })
mapResult.foreach(println)
// [Ljava.lang.String;@2812cbfa
// [Ljava.lang.String;@2acf57e3
// [Ljava.lang.String;@506e6d5e
// List里面是数组
// result.foreach(arr =>{arr.foreach(println)})

// flatmap 扁平,原来的基础上再压一下
val flatMapResult : List[String] = nameList.flatMap{ x => x.split(" ") }
flatMapResult.foreach(println)


3、set无序不重复

// 创建
val set1 = Set(1,2,3,4,4)
val set2 = Set(1,2,5)
// 注意:set会自动去重
set1.foreach(println)
for(s <- set1) {
   println(s)
}

set方法举例

// 交集
val set3 = set1.intersect(set2)
set3.foreach{println}
val set4 = set1.&(set2)
set4.foreach{println}
println("*******")

// 差集
set1.diff(set2).foreach { println }
set1.&~(set2).foreach { println }

// 子集
set1.subsetOf(set2)
   
// 最大值
println(set1.max)
// 最小值
println(set1.min)
println("****")
   
// 转成数组,list
set1.toArray.foreach{println}
println("****")
set1.toList.foreach{println}
   
// mkString
println(set1.mkString)
println(set1.mkString("\t"))
  • set集合会自动去重
  • 交集:intersect ,&
  • 差集: diff ,&~
  • 子集:subsetOf
  • 最大:max
  • 最小:min
  • 转成数组,toList
  • 转成字符串:mkString(“~”)


4、map

  • map中每个元素就是一个二元组
  • Map(1 –>”bjsxt’)
  • Map((1,”bjsxt”))
  • 相同的key被后面的相同的key顶替掉,只保留一个
  • map.get(“1”).get
  • map.get(100).getOrElse("no value"):如果map中没有对应项,赋值为getOrElse默认设置的值
val map = Map(
   "1" -> "appke",
   2 -> "shsxt",
   (3,"xasxt")
)
// 获取值
println(map.get("1").get)
val result = map.get(8).getOrElse("no value")
println(result)


// map遍历
for(x <- map){
   println("====key:"+x._1+",value:"+x._2)
}
map.foreach(f => {
   println("key:"+ f._1+" ,value:"+f._2)
})

// 遍历key:map.keys
map.keys.foreach { key => {
   println("key:"+key+", value:"+map.get(key).get)
} }
println("---------")

// 遍历value:map.values
val valueIterable = map.values
valueIterable.foreach { value => {
   println("value: "+ value)
} }
合并map
  • ++例:map1.++(map2) map1中加入map2
  • ++:例:map1.++:(map2) map2中加入map1
    合并map会将map中的相同key的value替换
  // 合并map
val map1 = Map(
   (1,"a"),    
   (2,"b"),    
   (3,"c")    
)
val map2 = Map(
   (1,"aa"),
   (2,"bb"),
   (2,90),
   (4,22),
   (4,"dd")
)
map1.++:(map2).foreach(println)
map中的方法
  • filter:过滤,留下符合条件的记录
  • count:统计符合条件的记录数
  • contains:map中是否包含某个key
  • exist:符合条件的记录存在不存在
// count
val countResult  = map.count(p => {
   p._2.equals("shsxt")
})
println(countResult)
    
// filter
map.filter(_._2.equals("shsxt")).foreach(println)
    
// contains
println(map.contains(2))
   
// exist
println(map.exists(f =>{
   f._2.equals("xasxt")
}))


5、元组:不可变的列表

括号里面一堆元素
取值用”._XX”可以获取元组中的值
没有foreach,直接点出来

// 创建,最多支持22个
val tuple = new Tuple1(1) // 可new可不new
val tuple2 = Tuple2("zhangsan",2)
val tuple3 = Tuple3(1,2,3)
val tuple4 = (1,2,3,4)
val tuple18 = Tuple18(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)
val tuple22 = new Tuple22(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)

// 使用
println(tuple2._1 + "\t" +tuple2._2)
val t = Tuple2((1,2),("zhangsan","lisi"))
println(t._1._2)


注意:tuple各种类型都支持,最多支持22个参数

元组的遍历:tuple.productIterator得到迭代器,进而遍历

// 遍历
val tupleIterator = tuple22.productIterator
while(tupleIterator.hasNext){
   println(tupleIterator.next())
}
// swap翻转,只针对二元组
println(tuple2.swap)
    
// toString方法
println(tuple3.toString())


注意:swap元素翻转,只针对二元组:tuple2
tuple.productIterator


Scala学习笔记导航

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 在颜值即正义的年代,一个女人的风度大概就是一种能够超越是非的美丽吧。 一 参加了一个线下分享会,一位我非常佩服的老...
    徐嗖阅读 8,142评论 36 307
  • 不是所有的蚂蚁,都算是地道的蚂蚁纹,真正具有蚂蚁纹特点的小核桃应该是,粗筋纹路之间,密密麻麻攀爬着无数蝼蚁,...
    寻核舍阅读 956评论 4 2