欧博app:scala数据结构(一)

时间:3个月前   阅读:34

一、概述

1,特点

1)Scala同时支持不能变聚集和可变聚集 
2)两个主要的包:
    不能变聚集:scala.collection.immutable
    可变聚集:  scala.collection.mutable
3)Scala默认接纳不能变聚集,对于险些所有的聚集类,Scala都同时提供了可变(mutable)和不能变(immutable)的版本
4)Scala的聚集有三大类:序列Seq、集Set、映射Map,所有的聚集都扩展自Iterable特质,在Scala中聚集有可变(mutable)和不能变(immutable)两种类型。 

2,不能变聚集继续一览图

           

 3,可变聚集继续一览图

           

 

二、数组

1,可变和不能变:

  Array ===> ArrayBuffer

2,界说不能变数据数组方式

//界说数组:方式一
val arr = new Array[Int](10) //界说数组:方式二
val arr = Array(1,2,"scala") //挪用apply方式
arr(1)=8 //赋值,索引1的值为8

//添加,天生一个新的数组
arr.+:(4)
//删除,删除值为1的元素(而且只删除第一个
val array: Array[Any] = arr.drop(1)
//改,修改索引1的值为6
arr.update(1,6)
arr(1)=8 

3,界说变长数组

//界说变长数组
val ints = new ArrayBuffer[Int]()
val ints = ArrayBuffer[Int](1, 5, 9)

//添加,同一个数组
ints.append(10)
//删除,删除索引为2之后的2个元素
ints.remove(2,2)
//改,同定长数组
ints(1)=20
ints.update(1,20)

4,定长数组与变长数组转换

1)arr1.toBuffer  //定长数组转可变数组
2)arr2.toArray  //可变数组转定长数组

5,多维数组

//界说 arr 是一个二维数组:有三个元素[一维数组],每个一维数组存放4个值
val arr = Array.ofDim[Double](3,4)
//赋值
arr(1)(1) = 11.11

6,Scala数组与Java的List互转

// Scala聚集转成Java聚集
val arr = ArrayBuffer("1", "2", "3")
import scala.collection.JavaConverters._  //隐式转换
val javaList: util.List[String] = arr.asJava
println(javaList)    //[1, 2, 3]
//java的List转成scala的ArrayBuffer
val arrList = new util.ArrayList[String]()
arrList.add("test")
//隐式转换
import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable
val scalaArr: mutable.Buffer[String] = arrList

 

三、元组

1,简介

  元组也是可以理解为一个容器,可以存放种种相同或差别类型的数据

  说的简单点,就是将多个无关的数据封装为一个整体,称为元组, 最大的特点天真,对数据没有过多的约束。 //需求-> 高效率 

2,建立

//1. tuple 的类型是 Tuple3
//2. 凭据元素个数差别,对应的类型是 Tuple1----Tuple22
//3. Tuple是一个整体,使用迭代器举行遍历
//4. 接见Tuple的元素的方式是 tuple._1 .... tuple._3
//5. 元组是scala推荐使用,在java没有
val tuple = (1, 2, "scala")

 

四、聚集

1,界说:

  Scala的List可以直接存放数据,就是一个object,默认情况下Scala的List是不能变的,List属于序列Seq。 

  不能变、可变: List ===> ListBuffer

2,建立:

  val ints:List[Int] = List(1,2,3) //建立

  List默认接纳不能变方式在immutable包下不用引包,List中可以放任何类型数据List[Any],空聚集可以直接使用Nil工具

3,List常用操作

val ints = List(1,2,4,5)
//添加
val ints1 = ints :+ 20    //ints聚集后面追加
val ints2 = 10 +: ints    //ints聚集前面添加
val ints3 = 1 :: ints      //将1作为元素往ints中添加
val ints3 = ints1 :: ints //将ints1中的元素与ints中元素合并为一个聚集,:::双方都是聚集
//修改,会天生一个新的聚集
val intsUpdate = ints .updated(1,15) 
//删除,截取原聚集指定索引以及后面的所有元素天生一个新的聚集
val intsDrop = ints.drop(2) //List(4, 5)

4,ListBuffer常用操作

val buffer = ListBuffer(6,7,8)
//添加
buffer.append(10)
//修改
buffer.update(1,1)
//删除
buffer.remove(3)
println(buffer.mkString(","))  //6,1,10

 

五、Map

1,界说

  Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不能变的Map是有序的,可变的Map是无序的。

  不能变、可变: scala.collection.immutable.Map ===>  scala.collection.mutable.Map

2,不能变immutable.Map

//建立
//方式一:底层为元组Tuple2类型,输出顺序与声明顺序一致
val map1 = Map("A" -> 10, "B" -> 20, "C" -> 30)
//方式二:对偶元组
val map2 = Map( ("A", 1), ("B", 2), ("C", 3),("D", 30) )

3,可变mutable.Map

//建立: 输出顺序与声明顺序不一致
val map1 = scala.collection.mutable.Map("A" -> 10, "B" -> 20, "C" -> 30)
//添加
//添加并建立一个新的map
val map2 = map1 + ("FFF"->10)
//添加,追加到原有mao中
map1 += ("FFF"->10)
//删除指定key
map1 -= ("B","C")
//修改指定key的值,若是没有改key就为添加
map1.update("A",888)

4,Map取值

//key不存在抛异常NoSuchElementException
map(key) 
//map.get(key)获得Option工具,要么是Some要么是None
map.get(key).get
//key存在返回值,不存在返回默认值
map.getOrElse(key,default)

 

六、Set

1,可变不能变

  immutable.Set  ===> mutable.Set

2,可变set聚集操作

 

//建立可变set聚集
val mutableSet = mutable.Set(1,2,3)
//添加元素的两种方式
mutableSet.add(6)
mutableSet += 7
//删除元素的两种方式
mutableSet -= 2
mutableSet.remove(10)

 

,

平心在线

欢迎进入平心在线官网(原诚信在线、阳光在线)。平心在线官网www.px111.net开放平心在线会员登录网址、平心在线代理后台网址、平心在线APP下载、平心在线电脑客户端下载、平心在线企业邮局等业务。

上一篇:ug环球客户端:感人!澳洲配偶被猴群攻击,流浪狗舍身相救

下一篇:allbet登陆官网:香港应以大湾区为起点 放宽入境限制