版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
14.集合西安交通大學(xué)XI'ANJIAOTONGUNIVERSITY一、Scala集合基本內(nèi)容二、數(shù)組三、列表四
、數(shù)組緩沖與列表緩沖五
、元組六
、映射
七、集八、集合的常用方法ContentsTitle2一
、Scala
集合基本內(nèi)容正安文是大XPANIIAOT
UNIVERSITY3Scala集合基本內(nèi)容1.1基本介紹Scala
同時支持可變集合和不可變集合。兩個主要的包:不可變集合:scala.collection.immutable可變集合:
scala.collection.mutableScala默認(rèn)采用不可變集合,對于幾乎所有的集合類,Scala都同時提供了可變(mutable)
和不可變(immutable)的版本。4二、數(shù)組正安文是大UNIVERSITYXPANIIAOT52.1基本介紹1.
數(shù)組是結(jié)構(gòu)最簡單的集合,訪問速度更快。2.Array是一個具體的類,定義在了scala包下,可以通過new
來構(gòu)
造一個數(shù)組對象。3.
數(shù)組元素的類型可以是任意的,但是所有元素的類型必須一致。4.
數(shù)組對象必須是定長的。6T指的是數(shù)組元素的類型,n指的是數(shù)組元素的個數(shù)scala>
val
intArray=new
Array[lnt](3)intArray:Array[
lnt]=Array
(0,0,0)scala>intArray(0)=1scala>intArray(1)=
2scala>intArray(
2)=3scala>intArrayres0:Array[lnt
]=Array
1,2,3)方式
一:new
Array[T](n)數(shù)組元素的類型為Int,
數(shù)組元素的個數(shù)為3個數(shù)組元素采用小括號()訪問和賦
值,同時索引從0開始2.2數(shù)組的創(chuàng)建方式二:Array的伴生對象里還定義了一個apply工廠方法,可以在定義數(shù)組時直接賦值;類型指定可有可無,會自動推斷,因此也可以按如下方式構(gòu)造
數(shù)組對象:scala>val
charArray=Array'a','b','c')charArray:Array[
Char]=Array(a,b,c)數(shù)
組2.2數(shù)組的創(chuàng)建8正安文是大XPANIIAOT
UNIVERSITY三、列表93.1基本介紹1.列表中所有元素的類型都相同。2.列表是不可變的,一旦被定義了就不能改變,其次列表具有遞歸的結(jié)構(gòu)。3.List
默認(rèn)為不可變的集合,定義在scala.collection.immutable
包里,同
時List
也
在scala
包下聲明了。三、列表10scala>
val
intList
=
List(1,1,10,-5)
intList:List
[lnt]=
List(1,1,10,-5)scala>intList(O
)res0:
Int=
1scala>intList(
3)res1:
Int
=-5列表類名為List,
這是一個抽象類,因此不能用new
來構(gòu)造列表對象。但是伴生對象里有一個apply
工廠方法,接收若干個參數(shù),生成列表。三、列表列表元素采用小括號()訪問,索引從0開始3.2列表創(chuàng)建11操作符作用:+向列表的尾部添加元素或列表+:向列表的頭部添加元素或列表::向列表的頭部添加元素或列表::用于拼接左、右兩個列表向列表中增加元素,會返回新的列表/集合對象,所以需要一個新的列表對象來接收。在使用操作符增減元素時,一定要注意原列表與操作符的位置關(guān)系。三、列表3.3列表相關(guān)操作123.3列表相關(guān)操作scala>val
list1=List(1,2,3)
list1:
List[lnt]=
List(1,2,3)scala>val
list2=list1:+
4
list2:
List[
lnt]=List(1,2,3,4)scala>valtest
=list1:+List(1,2)
test:List[Any]=
List(
1,2,3,List(1,2))scala>val
list3
=0
+:list2list3:
List[lnt]=
List(0,1,2,3,4)scala>vallist4
=-2:-1:
:list3list4:List[lnt]=List(-2,-1,0,1,2,3,4)scala>val
list5=list1::list2list5:List[lnt]=
List(1,2,3,1,2,3,4)三、列表13scala>
vallist
=1::2::3::
:Nillist:
List[lnt]=
List(1,2,3)Nil表示空列表,可以調(diào)用前面介紹過的幾種添加元素的方法。除此之外,我們也可以利用Nil來創(chuàng)建列表。三、列表3.4列表子對象Nil14四、數(shù)組緩沖與列表緩沖正安文是大XPANIIAOT
UNIVERSITY15往尾部增加或刪除元素時,元素數(shù)量可以不只一個,但是在頭部添加時一次只能添加一個元素。可以通過方法
“toArray”
或
“toList”
把緩沖的數(shù)據(jù)構(gòu)造成一個數(shù)組或列表對象。這是構(gòu)造一個新的對象,原有緩沖仍然存在。164.1基本介紹>ArrayBuffer/ListBuffer定義在了scala.collection.mutable包下。new
ArrayBuffer/ListBuffer[Int]()操作符作用+=向緩沖的尾部添加元素十=:向緩沖的頭部添加元素-=從緩沖的尾部開始刪去第一個符合的元素四、數(shù)組緩沖與列表緩沖4.2代碼舉例scala>
import
scala.collection.mutable.{ArrayBuffer,ListBuffer}importscala.collection.mutable.{ArrayBuffer,ListBuffer}scala>
val
a=new
ArrayBuffer[
lnt]()a:scala.collection.mutable.ArrayBuffer[lnt
]=ArrayBuffer()scala>a
+=(1,2,3)res1:a.
type
=ArrayBuffer(1,2,3)scala>
0
+=:ares2:a.
type
=ArrayBuffer(0,1,2,3)scala>a-=
2res3:a.
type
=ArrayBuffer(0,1,3)scala>
val
b=a.toArrayb:Array[
lnt
]=Array(0,1,3)四、數(shù)組緩沖與列表緩沖17正安文是大XPANIIAOT
UNIVERSITY五、元組185.1基本知識元
組
列表相同點(diǎn)
:元組和列表一樣,都是不可變的。不同點(diǎn)
:列表包含的元素類型是相同的,元組可以包含不同類型的元素。定義位置不同,List定義在scala.collection.immutable包下
,Tuplex定義在了scala
包
下
。五、元組19方法一:valt
=new
Tuple3("God",'A',10)方法二:val
t=("God",'A’,10)每個數(shù)字代表元組包含的元素數(shù)量,
也就是說元組最多只能包含22個元素。元組并不是一個類,而是一系列類:Tuple1、Tuple2、Tuple3……Tuple22。五、元組new
TupleX(元組元素)5.2元組的定義20scala>
val
tuple=("God",'A',
10)tuple:(
String,Char,Int
)=(God,A,
10)scala>tuple._1res0
:
String
=Godscala>tuple._2res1:
Char
=
A不可遍歷,也就無法通過下標(biāo)來索引。只能通過“_1”、
“_2”……這樣來訪問每個元素。索引元組的第一個元素,使用“_1”字段五、元組5.2元組的索引21valt1=(
1,"a","b",true,2)for(item<-ductlterator){
println("item="
+item)vala=
List(1,2,3)for(i<-a){println(“i=”+i)元組數(shù)據(jù)的遍歷和其他集合有些不同,需要先調(diào)用productIterator方法以獲取其迭代器,然后對該迭代器進(jìn)行遍歷。左側(cè)代碼實(shí)現(xiàn)的是列表的遍歷,右側(cè)代碼實(shí)現(xiàn)的是元組的遍歷其功能為分別輸出列表和元組中元素的值五、元組5.4元組的遍歷22正安文是大XPANIIAOT
UNIVERSITY六、映射23映射并不是一個類,而是一個特質(zhì)。所以無法用new構(gòu)建映射對象,只能通過伴生對象里的apply工廠方法來構(gòu)造映射類型的對象。映射是包含一系列“鍵-值”對的集合,鍵和值的類型可以是任意的,但是每個“鍵-值”對的類型必須一致。表達(dá)式“object1->object2”
實(shí)際就是一個對偶(二元組),因此”鍵-值”對也可以寫成對偶的形式。六、映
射val
map2=Map((1,"+"),(2,"-"),(3,"*")valmap1=Map(1->
"+",2->"-",3->"*")鍵
-
>
值6.1映射的定義24方式二:使用map.getOrElse(key,“默認(rèn)值”)取值,如果key存在,返回對應(yīng)的值;如果
key
不存在,則返回提供的默認(rèn)值。方式一:給apply方法提供一個鍵值作為參數(shù),返回對應(yīng)的值,若不存在則拋出異常。scala>map.getOrElse(0,"defaultValue")res2
:String
=defaultValuescala>println(map(
3))六、映
射val
map=
Map(
1->"+",2->"-",3->6.2映射的取值方式25方式三:使用map.get(key).get
。如果key存在,map.get(key)
就會返回Some(值)然后Some
(值).get就可以取出對應(yīng)的值;如果key不存在,
map.get(key)
就會返回None。scala>map.get(O)res0:Option[
String]=Nonescala>map.get(
1)res1:Option[
String
]=Some(+)scala>map.get(
1).getres2:
String=+六、映
射val
map=Map(1->
"+",
2->"-",3->"*“")6.3映射的取值方式26for((k,v)<-map)1/遍歷所有的鍵和值,k
就是鍵,
v就是值for
(k<-map.keys)//遍歷所有的鍵for
(v<-map.values)//遍歷所有的值for
(item<-map)//遍歷所有的鍵值對,此時的item
是元組六、映
射6.4映射的遍歷27正安文是大XPANIIAOT
UNIVERSITY七、集287.1基本介紹1.集和映射一樣,也是一個特質(zhì),也只能通過apply工廠方法構(gòu)建對象。val
set=
Set(1,2,3)2.集只能包含字面值不相同的同類型元素。3.對象的apply方法是測試是否包含傳入的參數(shù),返回true或false。4.Scala
默認(rèn)使用的是不可變集,其定義在scala.collection.immutable
包下,
聲明在了scala包下,所以可以直接使用,不用導(dǎo)入。5.Set
是無序的。七、集29構(gòu)建時傳入了重復(fù)參數(shù),但是從返回的
結(jié)果上來看,重復(fù)的參數(shù)只保留了一個。scala>
val
set=Sel(1
,1,10,10,233)set:scala.collection.immutable.Set[Int]=Sel(1,10,233)scala>set(
100)res0:Boolean
=
falsescala>set(233)res1:
Boolean=true七、集測試是否包含傳入的參數(shù),若存在,
返回true;若不存在,返回false。7.2集的創(chuàng)建30八
、集合的常用方法正安文是大XPANIIAOT
UNIVERSITY31scala>Array
"apple","orange","pear").map(_+
"s")
res2:Array[
String]=Array(apples,oranges,pears)scala>
List(1,2,3
).map(_*2)res3:
List[lnt]=
List(2,4,6)接收一個無副作用的函數(shù)作為入?yún)ⅲ瑢φ{(diào)用該方法的集合的每個元素應(yīng)用入?yún)⒑瘮?shù),并把所得結(jié)果全部打包在一個新的集合里返回。集合的常用方法8.1
map方法32scala>
varsum
=
0var
sum:Int=
0scala>
Se(1,-2,234).foreach(sum+=_)scala>sumvalres0:
Int
=
233集合的常用方法foreach方法與map
方法類似,不過它的入?yún)⑹且粋€有副作用的函數(shù)。8.2foreach方法33scala>
List(1,2,3
)
zip
Array'1','2','3')res0:List[(Int,
Char)]=List(1,1),(2,2),(3,3))scala>
List(1,2,3
)
zip
Set(
"God","OK")res1:List[(
lnt,
String)]=List((1,God),
(2,OK))把兩個可迭代的集合——對應(yīng),構(gòu)成若干個對偶。如果其中一個集合比另一個長,則忽略多余的元素。集合的常用方法8.3
zip方法34入?yún)⑹且粋€二元操作函數(shù),利用該二元操作函數(shù)對集合中的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GB-T 37863.1-2019軌道交通 牽引電傳動系統(tǒng) 第1部分:城軌車輛》專題研究報告
- 《GBT 21789-2008石油產(chǎn)品和其他液體閃點(diǎn)的測定 阿貝爾閉口杯法》專題研究報告
- 《GBT 15825.6-2008金屬薄板成形性能與試驗方法 第6部分:錐杯試驗》專題研究報告
- 《GBT 2317.3-2008電力金具試驗方法 第3部分:熱循環(huán)試驗》專題研究報告
- 道路安全員初次培訓(xùn)課件
- 道路交通安全法課件
- 道縣摩托車安全駕駛培訓(xùn)課件
- 2021JACS指南:肺癌手術(shù)患者術(shù)前肺功能評估解讀課件
- 達(dá)州吉勤安全培訓(xùn)課件
- 邊檢業(yè)務(wù)培訓(xùn)課件
- 國家開放大學(xué)電大本科《流通概論》復(fù)習(xí)題庫
- 機(jī)關(guān)檔案匯編制度
- 2025年下半年四川成都溫江興蓉西城市運(yùn)營集團(tuán)有限公司第二次招聘人力資源部副部長等崗位5人參考考試題庫及答案解析
- 2026福建廈門市校園招聘中小學(xué)幼兒園中職學(xué)校教師346人筆試參考題庫及答案解析
- 2025年高職物流管理(物流倉儲管理實(shí)務(wù))試題及答案
- 中國古代傳統(tǒng)節(jié)日與民俗文化
- 高校申報新專業(yè)所需材料匯總
- (機(jī)構(gòu)動態(tài)仿真設(shè)計)adams
- NB-T 31053-2021 風(fēng)電機(jī)組電氣仿真模型驗證規(guī)程
- GB/T 1048-2019管道元件公稱壓力的定義和選用
- 文化創(chuàng)意產(chǎn)品設(shè)計及案例PPT完整全套教學(xué)課件
評論
0/150
提交評論