版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)組Scala數(shù)組聲明數(shù)組多維數(shù)組Scala數(shù)組/01
Scala語言中提供的數(shù)組是用來存儲(chǔ)固定大小的同類型元素,數(shù)組對(duì)于每一門編輯應(yīng)語言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一。 在Scala中,Array代表的含義和Java中類似,也是長度不可變的數(shù)組此外,由于Scala與Java都運(yùn)行在JVM中,雙方可以互相調(diào)用,因此Scala數(shù)組的底層實(shí)際上是Java數(shù)組。例如字符串?dāng)?shù)組在底層就是javaString[],整數(shù)數(shù)組在底層就是Int[]
Scala數(shù)組聲明數(shù)組/02
聲明數(shù)組變量并不是聲明number0、number1、...、number99一個(gè)個(gè)單獨(dú)的變量,而是聲明一個(gè)就像numbers這樣的變量,然后使用numbers[0]、numbers[1]、...、numbers[99]來表示一個(gè)個(gè)單獨(dú)的變量。數(shù)組中某個(gè)指定的元素是通過索引來訪問的。
數(shù)組的第一個(gè)元素索引為0,最后一個(gè)元素的索引為元素總數(shù)減1。聲明數(shù)組 以下是Scala數(shù)組聲明的語法格式:varz:Array[String]=newArray[String](3)或varz=newArray[String](3)以上語法中,z聲明一個(gè)字符串類型的數(shù)組,數(shù)組長度為3,可存儲(chǔ)3個(gè)元素。我們可以為每個(gè)元素設(shè)置值,并通過索引來訪問每個(gè)元素,如下所示:z(0)="taobao";z(1)="Baidu";z(4/2)="Google"最后一個(gè)元素的索引使用了表達(dá)式4/2作為索引,類似于z(2)="Google"。我們也可以使用以下方式來定義一個(gè)數(shù)組:varz=Array("taobao","Baidu","Google")聲明數(shù)組 下圖展示了一個(gè)長度為10的數(shù)組myList,索引值為0到9:聲明數(shù)組多維數(shù)組/03
多維數(shù)組一個(gè)數(shù)組中的值可以是另一個(gè)數(shù)組,另一個(gè)數(shù)組的值也可以是一個(gè)數(shù)組。矩陣與表格是我們常見的二維數(shù)組。以下是一個(gè)定義了二維數(shù)組的實(shí)例:varmyMatrix=ofDim[Int](3,3)實(shí)例中數(shù)組中包含三個(gè)數(shù)組元素,每個(gè)數(shù)組元素又含有三個(gè)值。多維數(shù)組
Employee類繼承了Person類并且,使用override關(guān)鍵字對(duì)父類的name進(jìn)行了重寫。classEmployeeextendsPerson{overridevalname=""overridedefname1=""overridevarname2:String=""}重寫1.Scala數(shù)組
2.聲明數(shù)組
3.多維數(shù)組
列表列表的定義列表基本操作連接列表列表的定義/01
Scala列表類似于數(shù)組,它們所有元素的類型都相同,但是它們也有所不同:列表是不可變的,值一旦被定義了就不能改變,其次列表具有遞歸的結(jié)構(gòu)而數(shù)組不是。列表的元素類型T可以寫成List[T]。例如,以下列出了多種類型的列表://字符串列表valsite:List[String]=List("Runoob","Google","Baidu")列表的定義//整型列表valnums:List[Int]=List(1,2,3,4)//空列表valempty:List[Nothing]=List()構(gòu)造列表的兩個(gè)基本單位是Nil和::Nil也可以表示為一個(gè)空列表。::符號(hào)連接順序是從右到左列表的定義//二維列表valdim:List[List[Int]]=List(List(1,0,0),List(0,1,0),List(0,0,1))列表的定義列表的基本操作/02
Scala列表有三個(gè)基本操作:head返回列表第一個(gè)元素、tail返回一個(gè)列表,包含除了第一元素之外的其他元素、isEmpty在列表為空時(shí)返回true。對(duì)于Scala列表的任何操作都可以使用這三個(gè)基本操作來表達(dá)。實(shí)例如下:列表的基本操作連接列表/03使用:::運(yùn)算符或List.:::()方法或List.concat()方法來連接兩個(gè)或多個(gè)列表。實(shí)例如下:連接列表
上面的代碼的執(zhí)行結(jié)果如下:$vimTest.scala$scalaTest.scalasite1:::site2:List(jingdong,Google,Baidu,Facebook,Taobao)site1.:::(site2):List(Facebook,Taobao,jingdong,Google,Baidu)List.concat(site1,site2):List(jingdong,Google,Baidu,Facebook,Taobao)連接列表1.列表的定義
2.列表的基本操作
3.連接列表
元祖Scala元祖迭代元祖元祖轉(zhuǎn)換為字符串Scala元祖/01
與列表一樣,元組也是不可變的,但與列表不同的是元組可以包含不同類型的元素。元組的值是通過將單個(gè)的值包含在圓括號(hào)中構(gòu)成的。例如:valt=(1,3.14,"Fred")以上實(shí)例在元組中定義了三個(gè)元素,對(duì)應(yīng)的類型分別為[Int,Double,java.lang.String]。Scala元祖
此外也可以使用以下方式來定義:valt=newTuple3(1,3.14,"Fred")元組的實(shí)際類型取決于它的元素的類型,比如(99,"runoob")是Tuple2[Int,String]。('u','r',"the",1,4,"me")為Tuple6[Char,Char,String,Int,Int,String]。目前Scala支持的元組最大長度為22。對(duì)于更大長度你可以使用集合,或者擴(kuò)展元組。Scala元祖迭代元祖/02
可以使用TductIterator()方法來迭代輸出元組的所有元素:objectTest{defmain(args:Array[String]){valt=(4,3,2,1)ductIterator.foreach{i=>println("Value="+i)}}}迭代元祖
以上代碼的執(zhí)行結(jié)果為:$scalacTest.scala$scalaTestValue=4Value=3Value=2Value=1迭代元祖元祖轉(zhuǎn)化為字符串/03可以使用Tuple.toString()方法將元組的所有元素組合成一個(gè)字符串,實(shí)例如下:objectTest{defmain(args:Array[String]){valt=newTuple3(1,"hello",Console)println("連接后的字符串為:"+t.toString())}}元祖轉(zhuǎn)化為字符串
執(zhí)行結(jié)果為:$scalacTest.scala$scalaTest連接后的字符串為:(1,hello,scala.Console$@4dd8dc3)元祖轉(zhuǎn)化為字符串1.Scala元祖
2.迭代元祖
3.元祖轉(zhuǎn)化為字符串
字典Scala中的Map對(duì)字典的遍歷Scala中的Map/01
Scala中的Map就和Python中的字典一樣,定義是不一樣的。值不可變的Mapvalinfo=Map("czm"->10,"CZM"->21) //格式1valinfo=Map(("czm",10),("CZM",21)) //格式2(更體現(xiàn)tuple作為存儲(chǔ)單元)res0:scala.collection.immutable.Map[String,Int]=Map(czm->10,CZM->21)//修改值**+-**,并不是改Scala中的Mapinfo("czm")=29 //錯(cuò)誤info+("czm"->100) //這種方式只是生成了一個(gè)新的不可變的Map原值并未改變info"czm" 值可變的Map:valinfo=scala.collection.mutable.Map("czm"->10,"CZM"->21) //格式1valinfo=scala.collection.mutable.Map(("czm",10),("CZM",21))//格式2(更體現(xiàn)tuple作為存儲(chǔ)單元)res0:scala.collection.mutable.Map[String,Int]=Map(czm->10,CZM->21)Scala中的Map//修改值**+=-=**info("czm")=29 //正確,若Key不存在,則增加//一次增加多個(gè)info+=("asd"->123,"aer"->122)//移除info-="czm"Scala中的Map對(duì)字典的遍歷/02
我們使用for循環(huán)對(duì)字典進(jìn)行遍歷,主要用到info.keys和info.values這2個(gè)方法://增強(qiáng)for循環(huán)for((key,value)<-info){println(key+":"+value)}對(duì)字典的遍歷//只要Key,也可以用keySetfor(key<-info.keys){println(key+":"+info(key))}//只要valuefor(value<-info.values){println(value)}對(duì)字典的遍歷1.Scala中的Map
2.對(duì)字典的遍歷
定義classclass的定義類的參數(shù)class的定義/01
類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例。類是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)空間。類是用于創(chuàng)建對(duì)象的藍(lán)圖,它是一個(gè)定義包括在特定類型的對(duì)象中的方法和變量的軟件模板。我們可以使用new關(guān)鍵字來創(chuàng)建類的對(duì)象,實(shí)例如下:class的定義
classPoint(xc:Int,yc:Int){varx:Int=xcvary:Int=ycdefmove(dx:Int,dy:Int){x=x+dxy=y+dyprintln("x的坐標(biāo)點(diǎn):"+x);println("y的坐標(biāo)點(diǎn):"+y);}}Scala中的類不聲明為public,一個(gè)Scala源文件中可以有多個(gè)類。以上實(shí)例的類定義了兩個(gè)變量x和y,一個(gè)方法:move,方法沒有返回值。class的定義
類的參數(shù)/02 Scala的類定義可以有參數(shù),稱為類參數(shù),如上面的xc,yc,類參數(shù)在整個(gè)類中都可以訪問。接著我們可以使用new來實(shí)例化類,并訪問類中的方法和變量:importjava.io._classPoint(xc:Int,yc:Int){varx:Int=xcvary:Int=yc類的參數(shù)
下面的方法是傳遞2個(gè)Int類型的參數(shù):defmove(dx:Int,dy:Int){x=x+dxy=y+dyprintln("x的坐標(biāo)點(diǎn):"+x);println("y的坐標(biāo)點(diǎn):"+y);}}類的參數(shù)
下面的方法是傳遞1個(gè)數(shù)組類型的參數(shù):objectTest{defmain(args:Array[String]){valpt=newPoint(10,20);//移到一個(gè)新的位置pt.move(10,10);}}類的參數(shù)執(zhí)行以上代碼,輸出結(jié)果為:類的參數(shù)1.class的定義
2.類的參數(shù)
object和class什么是class什么是objectclass和object的區(qū)別什么是class/01
scala中class:編譯器會(huì)自動(dòng)幫我們生產(chǎn)一個(gè)私有字段和2個(gè)公有方法get和set 類只會(huì)被編譯,不能直接執(zhí)行,類的聲明和主構(gòu)造器在一起被聲明,在一個(gè)類中,主構(gòu)造器只有一個(gè). 類和它的伴生對(duì)象可以相互訪問其私有成員,class中的main方法沒什么用了什么是class什么是object/02 scala中object:所有成員變量和方法默認(rèn)都是static的,所以可以直接訪問main方法class和object的一個(gè)差別是,單例對(duì)象不帶參數(shù),而類可以.因?yàn)椴荒苡胣ew關(guān)鍵字實(shí)例化一個(gè)單例對(duì)象,沒有機(jī)會(huì)傳遞給它參數(shù)。什么是objectclass和object的區(qū)別/03
class是定義是描述。它依照方法、或者其他組成元素定義一個(gè)類型。object是單例。它是定義的類的唯一實(shí)例。每個(gè)代碼中的object都將創(chuàng)建一個(gè)匿名類,這個(gè)匿名類繼承了聲明object想要實(shí)現(xiàn)的類。class和object的區(qū)別
scala中沒有static關(guān)鍵字對(duì)于一個(gè)class來說,所有的方法和成員變量在實(shí)例被new出來之前都是無法訪問的因此class文件中的main方法也就沒什么用了,scalaobject中所有成員變量和方法默認(rèn)都是static的所以可以直接訪問main方法。class和object的區(qū)別1.什么是class
2.什么是object
3.class和object的區(qū)別
繼承和重寫Scala繼承Scala的繼承層級(jí)重寫Scala繼承/01
Scala繼承一個(gè)基類和Java繼承很相似,但我們需要注意以下幾點(diǎn):1、重寫一個(gè)非抽象方法必須使用override修飾符。2、只有主構(gòu)造函數(shù)才可以往基類的構(gòu)造函數(shù)里寫參數(shù)。3、在子類中重寫超類的抽象方法時(shí),你不需要使用override關(guān)鍵字。接下來讓我們來看個(gè)實(shí)例:Scala繼承
在下圖實(shí)例中我們定義1個(gè)類Point和一個(gè)方法move,然后在Location類中繼承了Point類。Scala使用extends關(guān)鍵字來繼承一個(gè)類。Point稱為父類(基類),Location稱為子類。Scala繼承Scala的繼承層級(jí)/02 如下圖,Any是所有類型的父類,直接繼承Any的有兩個(gè)。一個(gè)是AnyRef,是所有引用類型的父類,Null是所有引用類型的子類,當(dāng)一個(gè)引用類型為空的時(shí)候,實(shí)際就是引用了Null;還有一個(gè)是AnyVal,所有的基本數(shù)據(jù)類型如Int、Boolean、Byte等都是AnyVal子類,這里需要額外強(qiáng)調(diào)一下Unit類似java中的void也是AnyVal子類。Nothing是所有類的子類。Scala的繼承層級(jí)重寫/03
Scala中使用override關(guān)鍵字進(jìn)行重寫,var變量不能在子類中重寫,除非父類是抽象類在抽象類中var變量不能賦初值,下面代碼展示了子類對(duì)父類的重寫。
abstractclassPerson{valname=""defname1=""varname2:String}重寫
Employee類繼承了Person類并且,使用override關(guān)鍵字對(duì)父類的name進(jìn)行了重寫。classEmployeeextendsPerson{overridevalname=""overridedefname1=""overridevarname2:String=""}重寫1.Scala繼承
2.Scala的繼承層級(jí)
3.重寫
Trait特質(zhì)什么是Trait特質(zhì)Trait特質(zhì)的特征構(gòu)造順序什么是Trait特質(zhì)/01
ScalaTrait(特質(zhì))相當(dāng)于Java的接口,實(shí)際上它比接口還功能強(qiáng)大。與接口不同的是,它還可以定義屬性和方法的實(shí)現(xiàn)。一般情況下Scala的類只能夠繼承單一父類,但是如果是Trait(特質(zhì))的話就可以繼承多個(gè),從結(jié)果來看就是實(shí)現(xiàn)了多重繼承。Trait(特質(zhì))定義的方式與類類似,但它使用的關(guān)鍵字是trait,如下所示:什么是Trait特質(zhì)
traitEqual{defisEqual(x:Any):BooleandefisNotEqual(x:Any):Boolean=!isEqual(x)} 以上Trait(特征)由兩個(gè)方法組成:isEqual和isNotEqual。isEqual方法沒有定義方法的實(shí)現(xiàn),isNotEqual定義了方法的實(shí)現(xiàn)。子類繼承特征可以實(shí)現(xiàn)未被實(shí)現(xiàn)的方法。所以其實(shí)ScalaTrait(特征)更像Java的抽象類。什么是Trait特質(zhì)
Trait特質(zhì)的特征構(gòu)造順序/02
特質(zhì)也可以有構(gòu)造器,由字段的初始化和其他特質(zhì)體中的語句構(gòu)成。這些語句在任何混入該特征的對(duì)象在構(gòu)造時(shí)都會(huì)被執(zhí)行。構(gòu)造器的執(zhí)行順序: 調(diào)用超類的構(gòu)造器; 特質(zhì)構(gòu)造器在超類構(gòu)造器之后、類構(gòu)造器之前執(zhí)行;Trait特質(zhì)的特征構(gòu)造順序 特質(zhì)由左到右被構(gòu)造; 每個(gè)特質(zhì)當(dāng)中,父特征先被構(gòu)造; 如果多個(gè)特質(zhì)共有一個(gè)父特征,父特征不會(huì)被重復(fù)構(gòu)造 所有特質(zhì)被構(gòu)造完畢,子類被構(gòu)造。 構(gòu)造器的順序是類的線性化的反向。線性化是描述某個(gè)類型的所有超類型的一種技術(shù)規(guī)格。Trait特質(zhì)的特征構(gòu)造順序1.
什么是Trait特質(zhì)
2.Trait特質(zhì)的特征構(gòu)造順序
隱式轉(zhuǎn)換為什么需要隱式轉(zhuǎn)換隱式參數(shù)和隱式轉(zhuǎn)換為什么需要隱式轉(zhuǎn)換/01
我們需要某個(gè)類中的一個(gè)方法,但是這個(gè)類沒有提供這樣的一個(gè)方法,所以我們需要隱式轉(zhuǎn)換,轉(zhuǎn)換成提供了這個(gè)方法的類,然后再調(diào)用這個(gè)方法第一步,需要一個(gè)增強(qiáng)的類,里面提供我們想要的方法,接收的參數(shù)的類型一定要是被增強(qiáng)類的類型。第二部,還需要在單例對(duì)象中寫明隱式轉(zhuǎn)換第三步,把隱式轉(zhuǎn)換函數(shù)導(dǎo)進(jìn)來為什么需要隱式轉(zhuǎn)換
在spark中隱士轉(zhuǎn)換都寫在伴生對(duì)象中,因?yàn)轭惖膶?shí)例肯定能找到伴生對(duì)象的,在一個(gè)作用域當(dāng)中。代碼示例如下:為什么需要隱式轉(zhuǎn)換
隱式參數(shù)和隱式轉(zhuǎn)換/02 隱式參數(shù)的意義是當(dāng)方法需要多個(gè)參數(shù)的時(shí)候,可以定義一些隱式參數(shù),這些隱式參數(shù)可以被自動(dòng)加到方法填充的參數(shù)里,而不必手填充。上面這個(gè)代碼中implicitP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年秋季物理學(xué)專業(yè)開學(xué)第一課 校友經(jīng)驗(yàn)與職業(yè)啟示講座方案
- 2026年秋季高中數(shù)學(xué)開學(xué)第一課 學(xué)科與生活聯(lián)系課件
- 麻醉藥品、精神藥品培訓(xùn)考試題及答案
- 綠色施工成果智能歸檔工藝
- 萬科城項(xiàng)目EPC總承包進(jìn)度管理方案-作業(yè)指導(dǎo)書
- 客運(yùn)站項(xiàng)目電氣安裝施工方案-施工作業(yè)指導(dǎo)書
- 綠地中心項(xiàng)目道路標(biāo)線施工方案-施工作業(yè)指導(dǎo)書
- 路基高邊坡安全專項(xiàng)施工方案
- 藥房自查報(bào)告
- 煤炭生產(chǎn)企業(yè)駕駛員定期維護(hù)安全操作規(guī)程
- JJF2095-2024壓力數(shù)據(jù)采集儀校準(zhǔn)規(guī)范
- 《模擬電子技術(shù)》課件-加減運(yùn)算電路
- 教師信息技術(shù)應(yīng)用能力培訓(xùn)課件
- 國家地質(zhì)公園規(guī)劃編制技術(shù)要求
- GB/T 17469-2024汽車制動(dòng)器襯片摩擦性能評(píng)價(jià)小樣臺(tái)架試驗(yàn)方法
- 供應(yīng)商來料質(zhì)量報(bào)告(年度與月度)
- 巨人通力電梯NOVA GKE調(diào)試說明書故障代碼GPN15 GVN15-GKE - 51668093D01-2022
- 簡約勞務(wù)合同范本
- JT-T-776.3-2010公路工程玄武巖纖維及其制品第3部分:玄武巖纖維土工隔柵
- GB/T 25849-2024移動(dòng)式升降工作平臺(tái)設(shè)計(jì)、計(jì)算、安全要求和試驗(yàn)方法
- 會(huì)計(jì)從業(yè)培訓(xùn)講義
評(píng)論
0/150
提交評(píng)論