Scala 速通语法(九)| 数据结构

数据结构

  • Scala集合简介
    • Scala同时支持不可变集合可变集合 不可变集合可以安全并发访问
    1. 不可变集合:scala.collection.immutable
    2. 可变集合:scala.collection.mutable
    • Scala默认采用不可变集合,对于几乎所有的集合类,Scala都提供了可变与不可变版本
    • Scala几个有三大类:序列Seq序列(有序性的,Linear、Seq)、集(Set)、映射(Map [key->value]),所有的的集合都扩展自Iterable特质

不可变集合

可变集合

Java 集合 和 Scala 集合相互转换

  • 添加 import scala.jdk.CollectionConverters._
  • 使用 asJava 和 asScala 相互转化

  • 转化规则
scala.collection.Iterable <=> java.lang.Iterable
scala.collection.Iterable <=> java.util.Collection
scala.collection.Iterator <=> java.util.{ Iterator, Enumeration }
scala.collection.mutable.Buffer <=> java.util.List
scala.collection.mutable.Set <=> java.util.Set
scala.collection.mutable.Map <=> java.util.{ Map, Dictionary }
scala.collection.mutable.ConcurrentMap <=> java.util.concurrent.ConcurrentMap
scala.collection.Seq  => java.util.List
scala.collection.mutable.Seq => java.util.List
scala.collection.Set  => java.util.Set
scala.collection.Map => java.util.Map
java.util.Properties => scala.collection.mutable.Map[String, String]

元组

  • 简介:元组也是可以理解为一个容器,可以存放各种相同或不同类型的数据 类似C++结构体

注:元组种最大只能22个元素

  • 元组的创建
      //元组创建
      val tuple = (1,2,"test",3.4,5.7f,'a')
      println(tuple.getClass.getName)
      //元组调用
      println(tuple._1+"---"+tuple._5)
      println(tuple.productElement(3))
      //元组遍历
      for(item<-tuple.productIterator){
        println(item)
      }
    

List

  • 在Java 中List 是一个接口,真正存放数据是ArrayList,Scala的List 可以直接存放数据,就是一个object,默认情况下Scala 的List 是不可变的,List 属于序列Seq
   //说明
   //1. 在默认情况下 List 是 scala.collection.immutable.List,即不可变
   //2. 在 scala 中,List 就是不可变的,如需要使用可变的 List,则使用 ListBuffer
   //3. List 在 package object scala 做了 val List = scala.collection.immutable.List
   //4. val Nil = scala.collection.immutable.Nil // List()
   //创建
   val list = List(1,2,3) //创建时分配元素
   println(list)
   val list2 = Nil //创建空list
   println(list2)
   //访问
   println(list(2))
   //追加 前面追加
   //符号::表示向集合中 新建集合添加元素 可以连用 运算顺序从右向左
   val nums = 2::(3::(4::list2))
   //后面追加
   val nums2 = nums :+ 5
   //::: 运算符是将集合中的每一个元素加入到集合中去 (按照摆放顺序 排列)
   //运算时,集合对象一定要放置在最右边
   println((nums ::: list).mkString(","))

ListBuffer

  • ListBuffer 是可变的 list 集合,可以添加,删除元素,ListBuffer 属于序列
    //创建
    val lb = ListBuffer(1, 2)
    //增加
    lb+=4
    lb.append(5)
    lb++=List(3,3,3)
    //删除
    lb.remove(2)
    println(lb)

Array 数组

  • 定长数组
  • 这里的数组等同于 Java 中的数组,中括号的类型就是数组的类型
  //创建Array方式1
  val arr1 = new Array[Any](10)
  //创建Array方式2
  val arr2 = Array(1,"3",3.3,'w')
  //修改
  arr1(3) = "333"
  //遍历
  for(i <- arr1){
    println("i====="+i)
  }
  • 变长数组
  //定义
  val arr3 = ArrayBuffer[Any](1,2,3)
  //追加
  arr3.append("4",5)
  arr3.append(6)
  //println(arr3.size)
  //重新赋值
  arr3(1) = 3
  //删除
  arr3.remove(3)

  for (i<-arr3){
    println(i)
  }
  • 多维数组
    //定义
    val arr = Array.ofDim[Double](3,5)
    //赋值
    arr(1)(2) = 3.4
    

Scala 数组与 Java 的List互转

  import scala.jdk.CollectionConverters._
  // Scala Array to Java List
  val array = Array[Int](1, 3, 4, 5)
  val javaList = array.toBuffer.asJava
  val javaArray = javaList.toArray
  //JavaArray to Scala
  val buffer:mutable.Buffer[AnyRef] = javaArray.toBuffer
  for (i<-buffer){
    println("-------------"+i)
  }
posted @ 2021-10-11 00:15  —清风碎心—  阅读(56)  评论(0编辑  收藏  举报