Scala集合
一、数组
package top.ruandb.scala.Course04 object ArrayApp { def main(args: Array[String]): Unit = { //定义数组 val a = new Array[String](5) //直接定义 val b = Array("java","scala","bash","swift") val c=Array(1,2,3,4,5,6,7,8,9,10) //数组中常用方法 println(a.length) println(c.sum) println(c.max) println(c.min) println(b.mkString(":")) //以:分割成字符串 :java:scala:bash:swift println(b.mkString("<",":",">")) //结果:<java:scala:bash:swift> //定义变长数组 val d = scala.collection.mutable.ArrayBuffer[Int]() d += 1 //添加元素 d += (2,3,4,5) //一次性添加多个元素 d ++= Array(6,7,8) //直接添加定长数组元素 println(d.mkString(",")) // 1,2,3,4,5,6,7,8 d.insert(0,0) //向指定位置添加指定元素 println(d.mkString(",")) // 0,1,2,3,4,5,6,7,8 d.remove(0) //删除指定位置的元素 d.remove(0,3) //从某个位置开始,删除n个元素 d.trimEnd(2) //从最后面删除n个元素 d.toArray //转换成定长数组 //遍历数组 for(ele <- d){ println(ele) } for(i <- 0 until c.length){ println(i) } } }
二、List(有序的,可重复的)
package top.ruandb.scala object ListApp extends App { val ln =Nil //定义一个空List println(ln) val l = List(1,2,3,4,5,6) //定义List println(l) println(l.head) //获取头 (1) println(l.tail)//获取尾 (2,3,4,5,6) val l2 = 0 :: l //(0.1,2,3,4,5,6) println(l2) val l5 = scala.collection.mutable.ListBuffer[Int]()//可变List l5 += 1 //添加单个元素 l5 += (2,3,4) //添加多个元素 l5 ++= List(5,6,7,8,9) //添加定长List print(l5) l5 -=1 //移除单个元素 l5 -=(2,3,4) //移除多个元素 l5 --=List(5,6,7,8) //移除一个定长List }
三、Set(无序的,不可重复的)
package top.ruandb.scala.Course04 object SetApp { def main(args: Array[String]): Unit = { val set1 = Set(2,2,3,4) //不可变set println(set1) //(2,3,4) val set2 = scala.collection.mutable.Set[Int]()//可变set,操作同list类似 set2 += 0 set2 += (1,2,3,4) set2 ++= Set(5,6) } }
四、Map(键值对)
package top.ruandb.scala.Course04 object MapApp { def main(args: Array[String]): Unit = { val m1 = Map("jack"-> 10,"lucy"-> 17)//定义Map println(m1) println(m1("lucy")) val m2 = scala.collection.mutable.Map("jack"-> 10,"lucy"-> 17)//可变的map println(m2) println(m2("lucy")) m2("lucy") = 99 // mutable Map 的值可修改 println(m2("lucy")) val m3 = scala.collection.mutable.HashMap[String , Int]() //定义一个空的Map m3 += ("jack" -> 19) m3 += ("lucy" -> 99,"lisi" -> 88) m3 ++= Map("wangwu" -> 77,"zhaoliu" -> 66) println(m3) //遍历Map for((key,value) <- m3){ println(key,value) } for( key<-m3.keySet){ println(key,m3.get(key)) } } }
五、Tuple(元组)
package top.ruandb.scala.Course04 object TupleApp { def main(args: Array[String]): Unit = { val name = ("jack","lucy","zhangsan","lisi") //定义一个Tuple println(name._1 + ":" + name._2 + ":" + name._3 + ":" + name._4) //取值 //遍历元组 for(i <-0 until(name.productArity)){ println(name.productElement(i)) } } }
六、Option Some None
大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是“无”,在Java,它是null。在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。
为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型。在没有值的时候,使用None,这是Option的一个子类。如果有值可以引用,就使用Some来包含这个值。Some也是Option的子类。