可變集合\n可變集合允許在原地修改數據,適合需要頻繁更新的場景。Scala 的可變集合包括 ArrayBuffer、HashSet和HashMap。
1. ArrayBuffer\nArrayBuffer 是一個可變的動態數組,提供高效的隨機訪問和添加操作。
import scala.collection.mutable.ArrayBuffer
// 創建ArrayBuffer
val buffer = ArrayBuffer(1, 2, 3, 4)
// 添加元素
buffer += 5
buffer ++= ArrayBuffer(6, 7)
// 刪除元素
buffer -= 3
buffer --= ArrayBuffer(4, 5)
// 訪問元素
val firstElement = buffer.head // 1
// 映射操作
val doubled = buffer.map(_ * 2) // ArrayBuffer(2, 4, 6, 12)
ArrayBuffer 提供了 +=、++=、-=、--= 等方法,用于動態修改集合內容。
2. HashSet\nHashSet 是一個基于哈希表的可變集合,提供常數時間的插入和查找操作。
import scala.collection.mutable.HashMap
// 創建HashMap
val map = HashMap("a" -> 1, "b" -> 2)
// 添加鍵值對
map += ("c" -> 3)
map ++= HashMap("d" -> 4, "e" -> 5)
// 刪除鍵值對
map -= "a"
map --= List("b", "c")
// 更新值
map("d") = 6
// 映射操作
val updatedMap = map.map { case (k, v) => (k.toUpperCase, v * 2) } // HashMap(D -> 12, E -> 10)
HashMap 提供了 +=、++=、-=、--=、map 等方法,用于高效管理鍵值對。
四、集合操作的函數式編程\nScala 的集合框架深度集成了函數式編程的概念,提供了豐富的操作方法。以下是一些常用的函數式操作示例:
1. map\nmap 函數對集合中的每個元素應用給定的函數,返回一個新的集合。”
val numbers = List(1, 2, 3, 4)
val squared = numbers.map(x => x * x) // List(1, 4, 9, 16)
2. filter\nfilter 函數返回一個包含所有滿足給定條件的元素的新集合。
val numbers = List(1, 2, 3, 4)
val even = numbers.filter(_ % 2 == 0) // List(2, 4)
3. flatMap\nflatMap 函數將集合中的每個元素映射到一個集合,然后將所有這些集合扁平化成一個集合。
val lists = List(List(1, 2), List(3, 4))
val flattened = lists.flatMap(identity) // List(1, 2, 3, 4)
4. foldLeft 和 foldRight\nfoldLeft 和 foldRight 函數通過將集合中的元素與一個累積器進行結合,生成一個最終結果。
val numbers = List(1, 2, 3, 4)
val sum = numbers.foldLeft(0)(_ + _) //
?10
val product = numbers.foldRight(1)(_ * _) // 24
5. reduceLeft 和 reduceRight
reduceLeft 和 reduceRight 函數類似于 foldLeft 和 foldRight,但它們不會提供初始值。
val numbers = List(1, 2, 3, 4)
val sum = numbers.reduceLeft(_ + _) // 10
val product = numbers.reduceRight(_ * _) // 24