柚子快報(bào)激活碼778899分享:開發(fā)語言 Scala之List
柚子快報(bào)激活碼778899分享:開發(fā)語言 Scala之List
列表
不可變列表(List)
在Scala中,通過List來定義不可變列表,需要注意的是,List本身是一個(gè)抽象類,所以并不能直接使用List來構(gòu)建對(duì)象,需要使用它的伴生對(duì)象來構(gòu)建 package com.fesco.list
import scala.::
object ListDemo {
def main(args: Array[String]): Unit = {
// 方式一
val list = List[Int](2, 3, 4, 5, 6)
println(list)
val list2 = List.apply(2, 3, 4, 5, 6)
println(list2)
// 方式二:
// :: 在list之前來追加數(shù)據(jù)
val list3 = 1 :: list
println(list3)
// 方式三:
// Nil是List的子類,表示一個(gè)空列表
val list4 = Nil
println(list4)
// 方式四:
val list5 = 1 :: 2 :: 3 :: 4 :: Nil
println(list5)
}
}
List被sealed修飾,說明List是一個(gè)密封類,那么就意味著List的子類必須和List處在同一個(gè)scala文件中,即List無法直接擴(kuò)展 基本操作 package com.fesco.list
object ListDemo2 {
def main(args: Array[String]): Unit = {
val list = List[Int](3, 4, 8, 1, 5, 9, 7)
// 獲取指定下標(biāo)位置上的元素
// 底層實(shí)際上是調(diào)用了父特質(zhì)LinearSeq中的apply函數(shù)
println(list(2))
// 等價(jià)于
println(list.apply(2))
// 獲取第一個(gè)元素
// println(list(0))
// 等價(jià)于
println(list.head)
// 獲取最后一個(gè)元素
println(list.last)
// 追加一個(gè)元素 - 產(chǎn)生一個(gè)新的列表
// val r1 = list :+ 6
val r1 = list.:+(6)
println(r1)
// 在頭部追加元素
// 從右向左計(jì)算
val r2 = 1 +: list
// val r2 = list.+:(1)
// 當(dāng)出現(xiàn):的時(shí)候,:對(duì)著誰就從誰開始計(jì)算
// 如果兩邊都有:,那么從右向左計(jì)算
// 錯(cuò)誤的寫法:list +: 1
println(r2)
// 或者
// val r3 = list.::(1)
val r3 = 1 :: list
// list :: 1
println(r3)
// 構(gòu)建了列表
// 從右到左:先構(gòu)建空列表List(),然后頭部拆入5,在插入4
val r4 = 1 :: 2 :: 3 :: 4 :: 5 :: List()
// 等價(jià)于
val r5 = 1 :: 2 :: 3 :: 4 :: 5 :: Nil
println(r4)
println(r5)
}
}
列表的合并 package com.fesco.list
object ListDemo3 {
def main(args: Array[String]): Unit = {
val list1 = List[Int](1, 2, 3, 4)
val list2 = List[Int](5, 6, 7, 8)
// 合并列表
val r1 = list1 ++ list2
println(r1)
val r2 = list1 ++: list2
println(r2)
val r3 = list1 :++ list2
println(r3)
val r4 = list1.concat(list2)
println(r4)
val r5 = list1 ::: list2
println(r5)
}
}
可變列表(ListBuffer)
Scala中,通過ListBuffer來定義可變列表 package com.fesco.list
import scala.collection.mutable.ListBuffer
object ListBufferDemo {
def main(args: Array[String]): Unit = {
// 方式一
// 調(diào)用ListBuffer類的主構(gòu)造器
val buffer1 = new ListBuffer[Int]()
buffer1 += 4
println(buffer1)
// 方式二
// 調(diào)用了ListBuffer伴生對(duì)象中的apply函數(shù)
val buffer2 = ListBuffer[Int](1, 2, 3, 4, 5)
println(buffer2)
}
}
基本操作 package com.fesco.list
import scala.collection.mutable.ListBuffer
object ListBufferDemo2 {
def main(args: Array[String]): Unit = {
val list = ListBuffer[Int](1, 2, 3, 4, 5)
// 在尾部追加元素
list += 4
list append 7
println(list)
// 在頭部插入元素
list prepend 0
// list.+=:(2)
2 +=: list
println(list)
// 在指定下標(biāo)位置上插入元素
list.insert(3, 6)
println(list)
// 修改指定位置上的元素
list(2) = 10
list.update(3, 12)
println(list)
// 刪除指定下標(biāo)位置上的元素
list.remove(0)
println(list)
// 刪除指定的元素(第一個(gè))
list -= 3
println(list)
}
}
合并列表 package com.fesco.list
import scala.collection.mutable.ListBuffer
object ListBufferDemo3 {
def main(args: Array[String]): Unit = {
val list1 = ListBuffer[Int](1, 2, 3)
val list2 = ListBuffer[Int](4, 5, 6)
// 將list1和list2合并
// ++合并之后產(chǎn)生一個(gè)新的列表,而不是修改原列表
val r1 = list1 ++ list2
println(r1)
// 要求:將list2中的數(shù)據(jù)合并到list1中
list1 ++= list2
println(list1)
// 獲取list1中有而list3中沒有的數(shù)據(jù) - 差集
val list3 = ListBuffer[Int](1, 3, 5, 7)
list1 --= list3
println(list1)
}
}
柚子快報(bào)激活碼778899分享:開發(fā)語言 Scala之List
文章鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。