版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15014327/article/details/83624748
package scala
object CollectionTest {
def main(args: Array[String]): Unit = {
/**
* scala中的集合分为两种,一种是可变的集合,另一种是不可变的集合
* 1.可变的集合可以更新或修改,添加、删除、修改元素将作用于原集合
* 2.不可变集合一量被创建,便不能被改变,添加、删除、更新操作返回的是新的集合,老集合保持不变
* scala中所有的集合都来自于scala.collection包及其子包mutable, immutable当中
* 1 scala.collection.immutable包中的集合绝对是不可变的,函数式编程语言推崇使用immutable集合
* 2 scala.collection.mutable包中的集合在是可变的,使用的时候必须明白集合何时发生变化
* scala默认引入的包
* 1 import java.lang._
* 2 import scala._
* 3 import Predef._
* 默认使用的都是immutable集合,如果要使用mutable集合,需要引入
* import scala.collection.mutable
* Predef对象中包含了Set、Map等集合的定义
* type Function[-A, +B] = Function1[A, B]
type Map[A, +B] = immutable.Map[A, B]
type Set[A] = immutable.Set[A]
val Map = immutable.Map
val Set = immutable.Set
不可变集合与可变集合对应关系
Array ArrayBuffer
List ListBuffer
String StringBuilder
/ LinkedList,DoubleLinkedList
List MutableList
/ Queue
Array ArraySeq
Stack Stack
HashMap HashMap
HashSet HashSet
/ ArrayStack
*/
//1.Set操作实战
//Set(集)是一种不存在重复元素的集合
//特点:Set在插入数据时不保证元素顺序,默认Set实现HashSet,集合中元素通过hashCode值组织
val numSet = Set(3.0,5) //Set[Double]
//添加元素
numSet.+(7)
//遍历
for(i <- numSet) println(i) // 默认不可变集合,numSet中没有添加新元素
//如果对插入的顺序有着严格的要求
//采用scala.collection.mutalbe.LinkedHashSet来实现
val linkedHashSet = scala.collection.mutable.LinkedHashSet(3.0,5)
linkedHashSet.add(7)
for(i <- linkedHashSet) println(i) // 可变集合,linkedHashSet中添加新元素
//2.Map操作实战
val customerInfo = Map("Tom" -> 21,"James" -> 25)
////customerInfo.clear() 不可变集合不具备该方法
//创建可变Map
val customerInfoVar = scala.collection.mutable.Map("Tom" -> 21,"James" -> 25)
customerInfoVar.clear()
//遍历1
for(i <- customerInfoVar) println(i) //输出都是元组
//遍历2
customerInfoVar.foreach(e =>
{
val (k,v) = e
println(k+":"+v)
})
//遍历3
customerInfoVar.foreach(e => println(e._1 + ":" + e._2))
//定义空Map
val xMap = scala.collection.mutable.Map[String,Int]()
//填充值
xMap.put("spark", 1)
//判断是否包含某个Key
xMap.contains("spark")
//初始化Map另一种方式(元组)
val yMap = scala.collection.mutable.Map(("Tom",21),("James",25))
//获取元素
val e = yMap.get("Tom")
println(e) //Some(21)
/**
* OPtion,None,Some类型
* None、Some是Option的子类,它主要解决null的问题
*/
//3.Tuple操作实战
//元组是不同类型值的聚集
("how","are","you")
("hello","I am",20)
val tup = ("hello","I am",20)
//访问元素
println(tup._1)
println(tup._2)
println(tup._3)
//通过模式匹配获取元组内容
val (one,two,three) = tup
//4.队列操作实战
//不可变队列
var queue = scala.collection.immutable.Queue(1,2,3)
//出队
println(queue.dequeue)
println("出队后,queue:"+queue.size) //3,不可变队列个数没变
//入队
queue.enqueue(4)
println("入队后,queue:"+queue.size) //3,不可变队列个数没变
//可变队列
var queue1 = scala.collection.mutable.Queue(1,2,3)
queue1+=4
queue1.enqueue(5)
println(queue1.size) //5,可变队列队列加入了元素
//加入集合元素
queue1.++:(List(6,7,8))
//5.栈操作实战
//可变栈
//new创建栈
val stack = new scala.collection.mutable.Stack[Int]
//Apply创建栈
val stack1 = scala.collection.mutable.Stack(1,2,3)
//出栈
stack1.top
//入栈
stack1.push(1)
stack1.push(2, 1)
}
}
参考自:https://blog.csdn.net/column/details/scalalearning.html