05.scala集合

数组

不可变数组:

object ArrayApp extends App { 
val a = new Array[String](5) 
println(a.length) 
a(1) = "hello" foreachList(a) 
println() 
val b = Array("hadoop","spark","hive") 
foreachList(b) 
val c = Array(1,2,3,4,5,6,7,8) 
println("max="+c.max+ " min="+c.min+ " sum="+c.sum) 
println(c.mkString(" ")) 
println(c.mkString("<"," ",">")) 
def foreachList(list: Array[String]): Unit ={ 
for (i <- list){ print(i+ " ") 
} 
}
}

Array.scala源码里
类名+括号.
这里就是调用了object的apply方法


image.png

image.png

数组转字符串用mkString,别用toString

可变数组

val d = scala.collection.mutable.ArrayBuffer[Int]() 
d+=1 
d+=2 
 d+=(3,4,5)
//可以加多个 
d++=Array(6,7,8)
//两个+加一个数组 
d.insert(0,0)
//指定位置插入 
d.remove(1)
//移除索引数据
d.trimEnd(2)
//倒叙删除 
println(d) 
for(i <- 0.until(d.length)){
 println(d(i))
 } 
println() 
for(ele <-d){ 
print(ele+" ") 
} 
println() 
for(i <- 0.until(d.length).reverse){
//反序遍历 print(i+" ") 
}
//把可变数组转变为不可变数组
d.toArray
image.png

list

NIL为不可变的list

object ListApp extends App { 
val list = List(1,2,3,4,5) 
println(list) 
//List(1, 2, 3, 4, 5) 
println(list.head)
//1,第一个元素 
println(list.tail)
//List(2, 3, 4, 5),除第一个外都是tail 
val list1 = 1::Nil 
//List(1)
val list9=2 :: list1
//List(2,1)
val list10=1 ::2 ::3 ::Nil
//List(1,2,3)
//为定长的list println(list1) 
val list2 = scala.collection.mutable.ListBuffer[Int]()
//可变list 
list2+=1 
list2+=(2,3,4,5) 
list2++=List(6,6,7) 
list2-=2 
list2--=List(5,6) 
list2.toArray 
//转成数组 
list2.toList 
//转成定长
list list2.isEmpty 
//是否为空 
list2.head 
//头元素
} 
//递归求和 
def sum(nums:Int*):Int={ 
if(nums.length==0){
 0 
}else{ 
nums.head + sum(nums.tail:_*) 
}
 }
println(sum()) 
println(sum(1,2,3,4))
image.png
image.png

set

可变set:scala.collection.mutable.Set

val set=scala.collection.mutable.Set[Int]()

用法与list一样 数据不重复

Map

Map(映射)是一种可迭代的键值对(key/value)结构。

所有的值都可以通过键来获取。

Map 中的键都是唯一的。

Map 也叫哈希表(Hash tables)。

Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。

默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类

在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。以下实例演示了不可变 Map 的应用:

// 空哈希表,键为字符串,值为整型

var A:Map[Char,Int] = Map()

// Map 键值对演示

val colors = Map(“red” -> “#FF0000”, “azure” -> “#F0FFFF”)

定义 Map 时,需要为键值对定义类型。如果需要添加 key-value 对,可以使用 + 号,如下所示:

A += (‘I’ -> 1)

A += (‘J’ -> 5)

A += (‘K’ -> 10)

A += (‘L’ -> 100)

object Test { 
def main(args: Array[String]) { 
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F") 
val nums: Map[Int, Int] = Map() 
println( "colors 中的键为 : " + colors.keys ) println( "colors 中的值为 : " + colors.values ) 
println( "检测 colors 是否为空 : " + colors.isEmpty ) 
println( "检测 nums 是否为空 : " + nums.isEmpty ) 
}
}
image.png

image.png

keys 返回 Map 所有的键(key)

values 返回 Map 所有的值(value)

isEmpty 在 Map 为空时返回true

Map 合并

你可以使用 ++ 运算符或 Map.++() 方法来连接两个 Map,Map 合并时会移除重复的 key。以下演示了两个 Map 合并的实例:

object Test {

def main(args: Array[String]) {

val colors1 = Map(
“red” -> “#FF0000”,

“azure” -> “#F0FFFF”,

“peru” -> “#CD853F”)

val colors2 = Map(
“blue” -> “#0033FF”,

“yellow” -> “#FFFF00”,

“red” -> “#FF0000”)

// ++ 作为运算符 
var colors = colors1 ++ colors2 
println( "colors1 ++ colors2 : " + colors ) 
// ++ 作为方法 
colors = colors1.++(colors2) 
println( "colors1.++(colors2)) : " + colors )
}
}

执行以上代码,输出结果为:

$ scalac Test.scala

$ scala Test

colors1 ++ colors2 : Map(blue -> #0033FF, azure -> #F0FFFF, peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

colors1.++(colors2)) : Map(blue -> #0033FF, azure -> #F0FFFF, peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

输出 Map 的 keys 和 values

以下通过 foreach 循环输出 Map 中的 keys 和 values:


object Test {

def main(args: Array[String]) {

val sites = Map(“runoob” -> “[http://www.runoob.com](http://www.runoob.com)”,

“baidu” -> “[http://www.baidu.com](http://www.baidu.com)”,

“taobao” -> “[http://www.taobao.com](http://www.taobao.com)”)

sites.keys.foreach{ 
i => print( "Key = " + i ) 
println(" Value = " + sites(i) )
}
}
image.png

Tuple元祖

image.png

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

推荐阅读更多精彩内容