List
2.1scala的List類是不可變的,大小及其中元素都不能修改。由連結清單實作,包含常用的head,tail,isEmpty方法。大多數在List上的操作都會涉及遞歸算法,将清單且分為頭部和尾部。
現在有一個需求:如果一個連結清單的順序是5,4,3,2,1。那麼怎麼才能不改變連結清單的情況下逆序列印出1,2,3,4,5.
答:可以使用遞歸解決這個問題。
(1)定義一個列印方法A,接收的參數是連結清單中的頭結點N1。
(2)傳傳入連結表頭結點H1
(3)将節點5之後的(4,3,2,1)作為一個新的連結清單,并将這個新連結清單的頭結點H2傳入方法A
(4)遞歸結束。
(5)方法A中的後面是列印出資訊
2.2想使用可變清單(相對于索引序列,是線性序列),但是List是不可變的,可以使用ListBuffer,在必要時可以将ListBuffer轉換為List。
2.3List是不可變的,如果建立要經常改變的清單,推薦使用ListBuffer.
2.4List是不可變的,不能從中删除元素,但是可以過濾掉不想要的元素,然後将結果賦給一個新的變量。
2.5合并或者連接配接清單
01.++
02.concat
03.:::方法
Stream
11.6使用List的懶惰版本,Stream
Stream和List很像,不同之處在于它的元素是惰性計算的【隻有元素被通路時才會計算】,和視圖建立惰性版本的集合類似。
1.建構Stream的方法
使用#::方法建構,表達式的結尾用Stream.empty代替Nil
val stream = 1 #:: 2 #:: 3 #:: 4 #:: Stream.empty
stream: scala.collection.immutable.Stream[Int] = Stream(1, ?)
顯示流開始于數字1,結尾用?表示。這是因為流的結尾還沒有執行。
2.對REPL的顯示進行說明
3.通路流的頭部元素和尾部元素
Array
11.7建立和更新數組【Array】的不同方式
01.可以建立具有初始值的數組。scala能夠隐式推斷數組類型。示例如下:
val arr = Array(“apple”,”google”,”alibaba”)
val arr = ArrayInt
val fruits = new ArrayString//定義一個數組初始大小和類型,随後填充。
02.Array類:數組是可變的,有序的集合。數組中的元素是可以修改的。數組是一種索引序列集合,根據索引位置直接而且快速地通路和修改值。
ArrayBuffer
11.8建立大小可變的數組(ArrayBuffer)
01.Array的内容是可變的,但是其大小不能改變。但是ArrayBuffer内容可變,大小亦可變。
02.往ArrayBuffer中添加元素的各種方法
03.需要導入包scala.collection.mutable.ArrayBuffer
11.9删除Array和ArrayBuffer的元素
01.從ArrayBuffer中删除元素的各種方法-=/–=/remove/clear
-=
–=
remove
clear
02.Array數組大小不能改變,是以不能直接删除元素。但是可以将元素從一個數組中過濾出去,然後将結果指派給新的數組。
11.10數組排序
1.sorted方法可以對具有Double,Float,Int和任何隐式scala.math.Ordering的其它類型集合進行排序。
sorted
2.如果想使用sorted方法排序Person類,隻需要把Ordered特質混入Person類。
3.sortWith可以傳遞函數【函數由簡單—>複雜】;sortWith可以對沒有Ordering的類型進行排序。例如:
class Person(var name:String){
override def toString = name
}