scala中所有的集合都来自于scala.collection包及其子包mutable, immutable当中,在scala中,默认使用的都是immutable集合,如果要使用mutable集合,需要在程序中引入
import scala.collection.mutable
//由于immutable是默认导入的,因此要使用mutable中的集合的话
//使用如下语句
scala> val mutableSet=mutable.Set(1,2,3)
mutableSet: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
//不指定的话,创建的是immutable 集合
scala> val mutableSet=Set(1,2,3)
mutableSet: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
1、Set操作实战
1、Set(集)是一种不存在重复元素的集合,它与数学上定义的集合是对应的
//定义一个集合
scala> val numsSet=Set(3.0,5)
numsSet: scala.collection.mutable.Set[Double] = Set(5.0, 3.0)
scala> numsSet+6
res20: scala.collection.mutable.Set[Double] = Set(5.0, 6.0, 3.0)
//遍历集
scala> for ( i <- res20 ) println(i)
5.0
6.0
3.0
//如果对插入的顺序有着严格的要求,则采用scala.collection.mutalbe.LinkedHashSet来实现
scala> val linkedHashSet=scala.collection.mutable.LinkedHashSet(3.0,5)
linkedHashSet: scala.collection.mutable.LinkedHashSet[Double] = Set(3.0, 5.0)
scala> linkedHashSet+6
res26: scala.collection.mutable.LinkedHashSet[Double] = Set(3.0, 5.0, 6.0)
2、Map操作实战
Map是一种键值对的集合,一般将其翻译为映射
//->操作符,左边是key,右边是value
scala> val studentInfo=Map("john" -> 21, "stephen" -> 22)
studentInfo: scala.collection.immutable.Map[String,Int] = Map(john -> 21, stephe
n -> 22)
//immutable不可变,它不具有以下操作
scala> studentInfo.clear()
<console>:10: error: value clear is not a member of scala.collection.immutable.M
ap[String,Int]
studentInfo.clear()
^
//创建可变的Map
scala> val studentInfoMutable=scala.collection.mutable.Map("john" -> 21, "stephe
n" -> 22)
studentInfoMutable: scala.collection.mutable.Map[String,Int] = Map(john -> 21, stephen -> 22)
//mutable Map可变,比如可以将其内容清空
scala> studentInfoMutable.clear()
scala> studentInfoMutable
res3: scala.collection.mutable.Map[String,Int] = Map()
//遍历操作
scala> for( i <- studentInfoMutable ) println(i)
(john,21)
(stephen,22)
//遍历操作
scala> studentInfoMutable.foreach(e=>
{val (k,v)=e; println(k+":"+v)}
)
john:21
stephen:22
//遍历操作
scala> studentInfoMutable.foreach(e=> println(e._1+":"+e._2))
john:21
stephen:22
//定义一个空的Map
scala> val xMap=new scala.collection.mutable.HashMap[String,Int]()
xMap: scala.collection.mutable.HashMap[String,Int] = Map()
//往里面填充值
scala> xMap.put("spark",1)
res12: Option[Int] = None
scala> xMap
res13: scala.collection.mutable.HashMap[String,Int] = Map(spark -> 1)
//判断是否包含spark字符串
scala> xMap.contains("spark")
res14: Boolean = true
//初始化Map,也可以通过 ("spark",1)这种方式实现(元组的形式)
scala> val xMap=scala.collection.mutable.Map(("spark",1),("hive",1))
xMap: scala.collection.mutable.Map[String,Int] = Map(spark -> 1, hive -> 1)
scala> "spark" -> 1
res18: (String, Int) = (spark,1)
//获取元素
scala> xMap.get("spark")
res19: Option[Int] = Some(1)
scala> xMap.get("SparkSQL")
res20: Option[Int] = None
Option,None,Some类型
Option、None、Some是scala中定义的类型,None、Some是Option的子类,它主要解决值为null的问题。
前面我们看到:
scala> xMap.get("spark")
res19: Option[Int] = Some(1)
3、元组操作实战
前面我们提到Map是键值对的集合,元组则是不同类型值的聚集
//元组的定义
scala> ("hello","china","beijing")
res23: (String, String, String) = (hello,china,beijing)
scala> ("hello","china",1)
res24: (String, String, Int) = (hello,china,1)
scala> var tuple=("Hello","China",1)
tuple: (String, String, Int) = (Hello,China,1)
//访问元组内容
scala> tuple._1
res25: String = Hello
scala> tuple._2
res26: String = China
scala> tuple._3
res27: Int = 1
//通过模式匹配获取元组内容
scala> val (first, second, third)=tuple
first: String = Hello
second: String = China
third: Int = 1
4、队列操作实战
//immutable queue
scala> var queue=scala.collection.immutable.Queue(1,2,3)
queue: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3)
//出队
scala> queue.dequeue
res38: (Int, scala.collection.immutable.Queue[Int]) = (1,Queue(2, 3))
//入队
scala> queue.enqueue(4)
res40: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3, 4)
//mutable queue
scala> var queue=scala.collection.mutable.Queue(1,2,3,4,5)
queue: scala.collection.mutable.Queue[Int] = Queue(1, 2, 3, 4, 5)
//入队操作
scala> queue += 5
res43: scala.collection.mutable.Queue[Int] = Queue(1, 2, 3, 4, 5, 5)
//集合方式
scala> queue ++= List(6,7,8)
res45: scala.collection.mutable.Queue[Int] = Queue(1, 2, 3, 4, 5, 5, 6, 7, 8)
5、栈操作实战
//mutable Stack
scala> import scala.collection.mutable.Stack
import scala.collection.mutable.Stack
//new 创建方式
scala> val stack = new Stack[Int]
stack: scala.collection.mutable.Stack[Int] = Stack()
//Apply创建方式
scala> val stack1=Stack(1,2,3)
stack1: scala.collection.mutable.Stack[Int] = Stack(1, 2, 3)
//出栈
scala> stack1.top
res55: Int = 1
//入栈
scala> stack.push(1)
res57: stack.type = Stack(1)
//入栈
scala> stack.push(2)
res58: stack.type = Stack(2, 1)
//出栈
scala> stack.top
res59: Int = 2
scala> stack
res60: scala.collection.mutable.Stack[Int] = Stack(2, 1)