Scala 速通语法(九)| 数据结构
数据结构
- Scala集合简介
- Scala同时支持不可变集合和可变集合 不可变集合可以安全并发访问
- 不可变集合:scala.collection.immutable
- 可变集合: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)
}