Map 是一种由键值对构成的可迭代对象,Scala 默认使用的是不可变 map,对 map 的任何修改都会生成一个新的 map,如果你想使用可变 map,需要引用 scala.collection.mutable.Map。
Map 创建
Map 的一般创建方式:
1 | // 创建空 Map |
Map 操作
基本操作
Scala Map 有三个基本操作:
keys
:返回 Map 所有的键(key)values
:返回 Map 所有的值(value)isEmpty
:在 Map 为空时返回 true
1 | scala> val colors = Map("red" -> "#FF0000", |
不可变 Map
不可变 Map 的增、删、查、集操作:
- 查询:
1 | // 查询键对应的值:返回一个 Option,如果 key 存在,返回 Some(value),否则返回 None |
- 添加:
1 | scala> colors1 + ("blue" -> "#0033FF", "yellow" -> "#FFFF00") |
- 移除:
1 | scala> colors1 - ("red", "azure") |
可变 Map
可变 Map 支持不可变 Map 的所有操作,同时还支持原地修改操作:
1 | scala> val colors1 = mutable.Map("red" -> "#FF0000", |
可变 Map 和不可变 Map 相互转化
可变 Map 和不可变 Map 可以通过 Seq 作为中间桥梁进行相互转化:
1 | scala> val map_im = Map("a"->"1", "b"->"2") |
Map 遍历
有三种常见的 Map 遍历方法:
1 | // 遍历关键字 |
Map 选择
Map 像 Set 一样,可以直接使用可变的和不可变的Map。SortedMap不可变但是其内容是按key值排序的;LinkedHashMap是可变的,其内容按插入的顺序存储;ListMap则是按插入顺序反序存储;TreeMap是使用红黑树存储。
Immutable | Mutable | Description | |
---|---|---|---|
HashMap | ✓ | ✓ | The immutable version “implements maps using a hash trie”; the mutable version “implements maps using a hashtable.” |
LinkedHashMap | ✓ | “Implements mutable maps using a hashtable.” Returns elements by the order in which they were inserted. | |
ListMap | ✓ | ✓ | A map implemented using a list data structure. Returns elements in the opposite order by which they were inserted, as though each element is inserted at the head of the map. |
Map | ✓ | ✓ | The base map, with both mutable and immutable implementations. |
SortedMap | ✓ | A base trait that stores its keys in sorted order. (Creating a variable as a SortedMap currently returns a TreeMap.) | |
TreeMap | ✓ | An immutable, sorted map, implemented as a red-black tree. | |
WeakHashMap | ✓ | A hash map with weak references, it’s a wrapper around java.util.WeakHashMap. |