4.Scal集合

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值