数组
定长数组
scala> val a = new Array[String](5)
a: Array[String] = Array(null, null, null, null, null)
scala> a
res0: Array[String] = Array(null, null, null, null, null)
scala> a.length
res1: Int = 5
scala> a(1) = "hello"
scala> a
res3: Array[String] = Array(null, hello, null, null, null)
scala> a(1)
res4: String = hello
scala> val b = Array("hadoop", "spark", "storm")
b: Array[String] = Array(hadoop, spark, storm)
scala> b(1)
res5: String = spark
scala> b(2)="java"
scala> b
res7: Array[String] = Array(hadoop, spark, java)
scala> val c=Array(1,2,3,4,5,6,7,8)
c: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)
scala> c.sum
res8: Int = 36
scala> c.max
res9: Int = 8
scala> c.min
res10: Int = 1
scala> c.mkString
res11: String = 12345678
scala> c.mkString(",")
res12: String = 1,2,3,4,5,6,7,8
scala> c.mkString("<",",",">")
res13: String = <1,2,3,4,5,6,7,8>
变长数组
scala> val d=scala.collection.mutable.ArrayBuffer[Int]()
d: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> d.length
res14: Int = 0
scala> d+=1
res15: d.type = ArrayBuffer(1)
scala> d+=2
res16: d.type = ArrayBuffer(1, 2)
scala> d
res17: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2)
scala> d+=(3,4,5)
res18: d.type = ArrayBuffer(1, 2, 3, 4, 5)
scala> d ++= Array(6,7,8,9)
res21: d.type = ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)
// 在第0个位置插入0
scala> d.insert(0,0)
scala> d
res23: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
// 去掉第二个索引位置的值
scala> d.remove(2)
res24: Int = 2
scala> d
res25: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 3, 4, 5, 6, 7, 8, 9)
// 从第五个索引位置开始,去掉2个值
scala> d.remove(5,2)
scala> d
res27: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 3, 4, 5, 8, 9)
// 去掉最后两个值
scala> d.trimEnd(2)
scala> d
res29: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 3, 4, 5)
// 可变数组转换成不可变数组
scala> d.toArray
res30: Array[Int] = Array(0, 1, 3, 4, 5)
scala> d.mkString
res31: String = 01345
// 遍历数组
scala> for(i <- 0 until d.length){
| print(d(i)+" ")
| }
0 1 3 4 5
scala> for (ele <- c){
| print(ele+" ")
| }
1 2 3 4 5 6 7 8
scala> for(i <- (0 until d.length).reverse){
| print(d(i)+" ")
| }
5 4 3 1 0
list
scala> Nil
res36: scala.collection.immutable.Nil.type = List()
// 定义一个List
scala> val l = List(1, 2, 3, 4, 5)
l: List[Int] = List(1, 2, 3, 4, 5)
scala> l.head
res37: Int = 1
scala> l.tail
res38: List[Int] = List(2, 3, 4, 5)
// 拼接其他List
scala> val l2 = 1 :: Nil
l2: List[Int] = List(1)
scala> val l3 = 2 :: l2
l3: List[Int] = List(2, 1)
scala> l.length
res39: Int = 5
// 定义一个变长List
scala> val l5 = scala.collection.mutable.ListBuffer[Int]()
l5: scala.collection.mutable.ListBuffer[Int] = ListBuffer()
scala> l5 += 2
res40: l5.type = ListBuffer(2)
scala> l5 += (3, 4, 5)
res41: l5.type = ListBuffer(2, 3, 4, 5)
scala> l5 ++= List(3, 4, 5, 6)
res42: l5.type = ListBuffer(2, 3, 4, 5, 3, 4, 5, 6)
scala> l5 -= 2
res43: l5.type = ListBuffer(3, 4, 5, 3, 4, 5, 6)
scala> l5 -= (1, 4)
res44: l5.type = ListBuffer(3, 5, 3, 4, 5, 6)
scala> l5 --= List(4, 5, 6)
res45: l5.type = ListBuffer(3, 3, 5)
scala> l5.toList
res46: List[Int] = List(3, 3, 5)
scala> l5.toArray
res47: Array[Int] = Array(3, 3, 5)
scala> l5.isEmpty
res48: Boolean = false
scala> l5.head
res49: Int = 3
scala> l5.tail.head
res50: Int = 3
递归求和
Set :无序,不可重复
scala> val s = Set(1, 2, 3, 1, 2, 5, 6)
s: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 3)
// 可变Set
scala> val set = scala.collection.mutable.Set[Int]()
set: scala.collection.mutable.Set[Int] = Set()
scala> set += 1
res53: set.type = Set(1)
scala> set += (1, 2, 3, 4)
res54: set.type = Set(1, 2, 3, 4)
Map
// 定义一个Map
scala> val students = Map("lisi" -> "class 1", "zhangsan" -> "class 2", "wanger" -> "class 3")
students: scala.collection.immutable.Map[String,String] = Map(lisi -> class 1, zhangsan -> class 2, wanger -> class 3)
// Map的key
scala> students.keys
res55: Iterable[String] = Set(lisi, zhangsan, wanger)
// Map的value
scala> students.values
res56: Iterable[String] = MapLike(class 1, class 2, class 3)
scala> students.isEmpty
res57: Boolean = false
// 定义一个可变的Map
scala> val students2 = scala.collection.mutable.Map[String, String]()
students2: scala.collection.mutable.Map[String,String] = Map()
scala> students2 += ("zhaosi" -> "class 4")
res58: students2.type = Map(zhaosi -> class 4)
// 合并两个Map,结果是可变的Map
scala> students ++ students2
res59: scala.collection.immutable.Map[String,String] = Map(lisi -> class 1, zhangsan -> class 2, wanger -> class 3, zhaosi -> class 4)
// 遍历Map
scala> students.keys.foreach { i =>
| print("key = " + i)
| println("value = " + students(i))
| }
key = lisivalue = class 1
key = zhangsanvalue = class 2
key = wangervalue = class 3
scala>
| students.contains("lisi")
res62: Boolean = true
Tuple:不可变,可以包含不同类型的元素
// 定义tuple
scala> val t = (1, 3.14, "lisi")
t: (Int, Double, String) = (1,3.14,lisi)
scala> val t2 = Tuple3(1, 3.14, "zhangsan")
t2: (Int, Double, String) = (1,3.14,zhangsan)
// 遍历tuple
scala> t.productIterator.foreach { i => println("value = " + i) }
value = 1
value = 3.14
value = lisi
// 通过下标访问元素
scala> t._1
res66: Int = 1
scala> t._2
res67: Double = 3.14
// 转换成字符串
scala> t.toString()
res68: String = (1,3.14,lisi)
Option:用来表示一个值是可选的
Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象None 。
scala> val students = Map("lisi" -> "class 1", "zhangsan" -> "class 2", "wanger" -> "class 3")
students: scala.collection.immutable.Map[String,String] = Map(lisi -> class 1, zhangsan -> class 2, wanger -> class 3)
scala> students.get("list")
res69: Option[String] = None
scala> students.get("lisi")
res70: Option[String] = Some(class 1)
scala> val o1=Some(5)
o1: Some[Int] = Some(5)
scala> val o2=None
o2: None.type = None
scala> o1.getOrElse(0)
res72: Int = 5
// 没有取到值就使用给定的值
scala> o2.getOrElse(10)
res73: Int = 10