17 scala集合使用

海邊看花開發表於2021-01-05
1 陣列的使用
1.1 定長陣列的使用
val arr01 = new Array[Int](4)  // 定義一個陣列,型別為Int,長度為4的陣列
arr01(3)=10   //  修改陣列arr01的下標為3的元素
1.2 變變陣列的使用
import scala.collection.mutable.ArrayBuffer
val arr02 = ArrayBuffer[Any](3, 2, 5)  // 定義一個型別為Any的變長陣列
 # 可變陣列的增刪改查
 arr02(0) // 查詢陣列arr01的第一個元素
 arr02.appned(10) // 在陣列尾部進行追加
 arr02(0)=5   // 修改陣列的第一個元素值為5
 arr02.remove(1) // 刪除陣列下標為1的元素
# 陣列的遍歷
for (i <- arr01) {
  println(i)
}
# 變長陣列與定長陣列相互轉換
arr03 = arr01.toBuffer  // 將定長陣列轉換為變長陣列
arr04 = arr02.toArray   // 將變長陣列轉換為定長陣列
2 元組的使用
2.1 元組的使用

注意: scala中的元組最大隻有22個元素

val tuple1 = (1, 2, 3, "hello", 4)   // 定義一個元組tuple
2.2 元組的查詢與遍歷
# 兩種方法
tuple1._1  // 取出元組的第一個元素
tuple1.productElement(0)  // 使用productElement(index)方法,取出元組的第一個元素
//遍歷元組, 元組的遍歷需要使用到迭代器
for (item <- t1.productIterator) {
  println("item=" + item)
}
3 列表的使用

在預設情況下 List 是scala.collection.immutable.List,即不可變,
如果要使用可變型別的,需使用: scala.collection.mutable.List

3.1 不可變列表的使用
val list01 = Nil  //空列表
list02 = List(1, 2, 3, "Hello")   # 建立一個列表
val list03= (1 :: 2 :: 2 :: Nil)    # 使用符號建立一個列表,使用時注意,尾部需要加上 `::Nil`
3.2 不可變列表的查詢
list02(1)  // 獲取list01的第二個元素
3.3 可變列表的使用
import scala.collection.mutable.ListBuffer
val lst0 = ListBuffer[Int](1, 2, 3) // 定義一個型別為Int的可變列表
val lst1 = ListBuffer[Int](4, 5)
3.4 可變列表的增刪改查
lst0(0) // 查詢下標為0的元素
lst(0) = 6 // 修改列表下標為0的元素值為6
lst.remove(2) // 刪除列表下標為1的元素
# 增加元素
lst0.append(2) // 在列表尾部追加一個值
lst0 :+ 2   // 在列表尾部追加一個值,注意 :  要永遠對著列表的方向
2+: lst0  // 在列表頭部追加一個值
lst0 ++= lst1 // 列表lst0 與列表 lst1 進行相加 
4 佇列的使用
4.1 佇列的建立
import scala.collection.mutable
val q1 = new mutable.Queue[Int]  // 建立佇列
4.2 佇列元素的增加
# 增加元素,使用時注意下面兩種寫法的不同
q1 ++= List(4,5,7)    // 預設值直接加在佇列後面 (9,4,5,7)
q1 += List(10,0)      // 表示將List(10,0) 作為一個元素加入到佇列中
4.3 佇列元素的進與出
//dequeue 從佇列的頭部取出元素 q1本身會變
val queueElement = q1.dequeue()
println("queueElement=" + queueElement + "q1="+q1)
 //enQueue 入佇列,預設是從佇列的尾部加入. Redis
    q1.enqueue(100,10,100,888)
    println("q1=" + q1)
4.4 獲取佇列元素
//1. 獲取佇列的第一個元素
println(q1.head) //  對q1沒有任何影響
//2. 獲取佇列的最後一個元素
println(q1.last) // 對q1沒有任何影響
//3. 取出隊尾的資料 ,即:返回除了第一個以外剩餘的元素,可以級聯使用
println(q1.tail)
println(q1.tail.tail.tail.tail) 
5 map的使用
5.1 map的建立
# 不可變map的建立
val map1 = Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> "北京")
# 可變map的建立
import scala.collection.mutable
val map1 = new scala.collection.mutable.HashMap[String, Int]   // 建立一個空的map
val map2 = mutable.Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> "北京")  // key-value形式建立
val map3 = mutable.Map(("Alice", 10), ("Bob", 20), ("Kotlin", "北京"))   // 使用對偶元組形式建立map
5.2 map的新增新元素
map1 +=  "Alice" -> 10
5.3 map值的獲取的幾種方式
# 方式1 map(key)
map4("Alice")   // 當key 不存在時會出現 java.util.NoSuchElementException: key not found 的異常

# 方式2 使用contains方法檢查是否存在key
if (map4.contains("Alice")) {
     println("key存在,值=" + map4("Alice"))
   } else {
     println("key不存在:)")
   }
   
 # 方式3-使用map.get(key).get取值
 //1. 如果key存在 map.get(key) 就會返回Some(值)  ,然後Some(值).get就可以取出
 //2. 如果key不存在 map.get(key) 就會返回None
 map4.get("Alice").get
 
 # 方式4-使用map4.getOrElse()取值
 map4.getOrElse("Alice", "預設的值“)  // 如果key存在就返回對應的value,不存在返回預設值
5.4 map值的遍歷的幾種方式
for ((k, v) <- map4) println(k + " is mapped to " + v)
for (v <- map6.keys) println(v)
for (v <- map6.values) println(v)
6 set的使用
6.1 set的建立
# 不可變set的建立
val set = Set(1, 2, 3) //不可變
# 可變set的建立
import scala.collection.mutable
val set2 = mutable.Set(1,2,"hello")
6.2 可變set集合的新增與刪除元素
# 增加,兩種方式
set2.add(4)
set += 4
# 刪除元素,兩種方式
set.remove(4)  // 刪除值為4的元素
set -= 4  

相關文章