Scala容器之Set和List

2021-10-02 16:32:14 字數 4622 閱讀 2754

scala中的集也分為兩種,一種是不可變集合,另一種是可變集合。

1.1 不可變set集合

//建立乙個空的不可變集

val/var 變數名 = set[型別]()

//給定元素來建立乙個不可變集

val/var 變數名 = set[型別](元素1, 元素2, 元素3...)

// 建立set集合 

scala> val a = set(1,1,2,3,4,5)

a: scala.collection.immutable.set[int] = set(5, 1, 2, 3, 4)

// 獲取集合的大小

scala> a.size

res0: int = 5

// 遍歷集合

scala> for(i <- a) println(i)

//新增元素生成新的集合

scala> a + 6

res1: scala.collection.immutable.set[int] = set(5, 1, 6, 2, 3, 4)

// 刪除乙個元素

scala> a - 1

res2: scala.collection.immutable.set[int] = set(5, 2, 3, 4)

// 刪除set集合中存在的元素

scala> a -- set(2,3)

res3: scala.collection.immutable.set[int] = set(5, 1, 4)

// 拼接兩個集合

scala> a ++ set(6,7,8)

res4: scala.collection.immutable.set[int] = set(5, 1, 6, 2, 7, 3, 8, 4)

//求2個set集合的交集

scala> a & set(3,4,5,6)

res5: scala.collection.immutable.set[int] = set(5, 3, 4)

//注意:這裡對不可變的set集合進行新增刪除等操作,對於該集合來說是沒有發生任何變化,這裡是生成了新的集合,新的集合相比於原來的集合來說發生了變化。

1.2 可變set集合
//導包

scala> import scala.collection.mutable.set

import scala.collection.mutable.set

//定義可變的set集合

scala> val set=set(1,2,3,4,5)

set: scala.collection.mutable.set[int] = set(1, 5, 2, 3, 4)

//新增單個元素

scala> set +=6

res10: set.type = set(1, 5, 2, 6, 3, 4)

//新增多個元素

scala> set +=(6,7,8,9)

res11: set.type = set(9, 1, 5, 2, 6, 3, 7, 4, 8)

//新增乙個set集合中的元素

scala> set ++=set(10,11)

res12: set.type = set(9, 1, 5, 2, 6, 3, 10, 7, 4, 11, 8)

//刪除乙個元素

scala> set -=11

res13: set.type = set(9, 1, 5, 2, 6, 3, 10, 7, 4, 8)

//刪除多個元素

scala> set -=(9,10)

res15: set.type = set(1, 5, 2, 6, 3, 7, 4, 8)

//刪除乙個set子集

scala> set --=set(7,8)

res19: set.type = set(1,5, 2, 6, 3, 4)

scala> set.remove(1)

res17: boolean = true

scala> set

res18: scala.collection.mutable.set[int] = set(5, 2, 6, 3, 4)

在scala中,也有兩種列表,一種是不可變列表、另一種是可變列表

2.1 不可變列表

val/var 變數名 = list(元素1, 元素2, 元素3...)

//使用 nil 建立乙個不可變的空列表

val/var 變數名 = nil

//使用 :: 方法建立乙個不可變列表

val/var 變數名 = 元素1 :: 元素2 :: nil

//建立乙個不可變列表,存放以下幾個元素(1,2,3,4)

scala> val list1=list(1,2,3,4)

list1: list[int] = list(1, 2, 3, 4)

//使用nil建立乙個不可變的空列表

scala> val list2=nil

list2: scala.collection.immutable.nil.type = list()

//使用 :: 方法建立列表,包含1、2、3三個元素

scala> val list3=1::2::3::nil

list3: list[int] = list(1, 2, 3)

2.2 可變列表
val/var 變數名 = listbuffer[int]()
val/var 變數名 = listbuffer(元素1,元素2,元素3...)

示例

//導包

scala> import scala.collection.mutable.listbuffer

import scala.collection.mutable.listbuffer

//定義乙個空的可變列表

scala> val a=listbuffer[int]()

a: scala.collection.mutable.listbuffer[int] = listbuffer()

//定義乙個有初始元素的可變列表

scala> val b=listbuffer(1,2,3,4)

b: scala.collection.mutable.listbuffer[int] = listbuffer(1, 2, 3, 4)

2.3 列表操作

//導包

scala> import scala.collection.mutable.listbuffer

import scala.collection.mutable.listbuffer

//定義乙個可變的列表

scala> val list=listbuffer(1,2,3,4)

list: scala.collection.mutable.listbuffer[int] = listbuffer(1, 2, 3, 4)

//獲取第乙個元素

scala> list(0)

res4: int = 1

//獲取第乙個元素

scala> list.head

res5: int = 1

//獲取除了第乙個元素外其他元素組成的列表

scala> list.tail

res6: scala.collection.mutable.listbuffer[int] = listbuffer(2, 3, 4)

//新增單個元素

scala> list +=5

res7: list.type = listbuffer(1, 2, 3, 4, 5)

//新增乙個不可變的列表

scala> list ++=list(6,7)

res8: list.type = listbuffer(1, 2, 3, 4, 5, 6, 7)

//新增乙個可變的列表

scala> list ++=listbuffer(8,9)

res9: list.type = listbuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)

//刪除單個元素

scala> list -=9

res10: list.type = listbuffer(1, 2, 3, 4, 5, 6, 7, 8)

//刪除乙個不可變的列表存在的元素

scala> list --=list(7,8)

res11: list.type = listbuffer(1, 2, 3, 4, 5, 6)

//刪除乙個可變的列表存在的元素

scala> list --=listbuffer(5,6)

res12: list.type = listbuffer(1, 2, 3, 4)

//可變的列表轉為不可變列表

scala> list.tolist

res13: list[int] = list(1, 2, 3, 4)

//可變的列表轉為不可變陣列

scala> list.toarray

res14: array[int] = array(1, 2, 3, 4)

set容器之構造和賦值

set容器概念 所有容器在被插入時都會被自動排序 本質 set和multiset屬於關聯式容器,底層結構是用二叉樹實現 set和multiset容器的區別 set容器不可以有重複元素 multiset容器可以有重複元素 注意 set容器無法使用和at方式訪問 include using namesp...

STL學習之set容器

set容器只是單純的鍵的集合。除了兩種例外情況外,set容器支援大部分的map操作。建構函式 cpp view plain copy explicit set const compare comp compare const allocator allocator template class in...

C STL之Set集合容器

set集合容器實現了紅黑樹的平衡二叉樹的資料結構,在插入元素時候,它會自動的進行調整二叉樹的排列,把該元素放到適當的位置,以保證每個子樹根節點的鍵值大於左子樹所有的鍵值,小於右子樹所有節點的鍵值 另外,還要確保根節點左子樹的高度與右子樹的高度相等,這樣,二叉樹的高度最小,從而達到檢索的速度最快 注意...