array
固定长度;arraybuffer
可变长度
arr.tobuffer
, buf.toarray
new
()
访问元素for (elem <- arr)
遍历元素;倒序 arr.reverse
for (elem <- arr if ...) ... yield ...
转换为新的数组
arr.filter(...).map(...)
或者更简洁 arr filter { ... } map {...}
arraybuffer
, 可配合 scala.collection.javaconversions
使用arrayops
对象val matrix = array.ofdim[double](3, 4)
// 3 行 4 列val scores = map("a" -> 100, "b" -> 90, "c" -> 95)
创建的默认为 immutable
的 hash mapscala.collection.mutable.map
new scala.collection.mutable.hashmap[string, int]
"a" -> 100
等价于 ("a", 100)
;创建的另一种写法 map(("a", 100), ("b", 90), ("c", 95))
scores("a")
//返回 optionscores("d").getorelse(0)
// 返回实际值scores("a") = 80
scores += ("d" -> 70, "e" -> 50)
scores -= "a"
scores + ("d" -> 70, "e" -> 50)
scores - "a"
for((k,v) <- map) ...
scala.collection.immutable.sortedmap("d" -> 1, "b" -> 2, "c" -> 3)
// map(b -> 2, c -> 3, d -> 1)scala.collection.mutable.linkedhashmap("d" -> 1, "b" -> 2, "c" -> 3)
// map(d -> 1, b -> 2, c -> 3)scala.collection.javaconverters
(k, v)
val a = (1, 3.14, "hello")
a._1
// 1val (first, second, _) = a
zip
方法scala.collection.javaconverters
可与 java 集合互相转换scala.collection
)、mutable(scala.collection.mutable
) 和 immutable(scala.collection.immutable
)
trait
或 class
的伴生对象中,都有 apply
方法,可直接构造集合实例,如 array(1,2,3)
traversable
集合层级的顶部,只有 foreach
方法是抽象的,其他方法都可直接继承使用iterable
,只有 iterator
方法是抽象的,其他方法都可直接继承使用
traversable
的区别在于,iterator
(可选择获取下一个元素的时间,在获取下一个元素之前会一直跟踪集合中的位置)iterable
中的 foreach
通过 iterator
实现seq
有序序列,包含 length
,有固定下标
indexedseq
快速随机访问,通过 vector
实现linearseq
高效的 head
/ tail
操作,通过 listbuffer
实现set
无序集合、无重复元素
hashset
,即元素其实是按照对应的哈希值排序的
hashset
中查找元素远快于在 array
或 list
中查找map
键值对集合,scala.predef
提供了隐式转换,可直接使用 key -> value
表示 (key, value)
sortedmap
按 key 排序vector
带下标的集合,支持快速的随机访问,相当于 不可变的 arraybuffer
list
在随机访问上的缺陷range
有序的整型集合,步长一致
1 to 10 by 3
即生成 1 到 10 的序列,步长为 3util
不包含上边界,to
包含上边界start
, end
, step
三个值list
有限的不可变序列
nil
,或包含两部分 head
元素和 tail
(子 list
)::
根据给定 head
和 tail
构建新的 list
1 :: 2 :: nil
等价于 1 :: (2 :: nil)
// 结果 `list(1,2)根据 head
, tail
的特性,可很容易进行递归操作
def multi(l: list[int]): int = l match { case nil => 1 case h :: t => h * multi(t) }
head
, tail
只需要常数时间 o(1)
o(1)
;可使用 mutable.listbuffer
可在头部 或 尾部进行增/删元素操作o(n)
sortedset
有序集合,按顺序访问元素,默认实现为红黑树
immutable.bitset
非负整数集合,底层使用 long
数组存储
1101
,即十进制的 13listmap
linkedlist
来表示 map
map
要慢,因此使用较少
list
的 head
)stream
与 list
类似,但其元素都是延迟计算的
force
来强制进行计算所有元素#::
构造,1 #:: 2 #:: 3 #:: stream.empty
结果为 stream(1, ?)
此处只打印了 head
1,而 tail
未打印,因为还未计算 tail
immutable.stack
lifo 序列
push
入栈 , pop
出栈, top
查看栈顶元素list
包括(push
= ::
, pop
= tail
, top
= head
)immutable.queue
fifo 序列
enqueue
入列,可使用集合做参数,一次性入列多个元素dequeue
出列,结果包含两部分 (element, rest)
arraybuffer
array
和 size
(继承自 resizablearray
)array
相同listbuffer
,类似于 arraybuffer
但是基于链表实现
linkedlist
linkedhashset
除了 hash 的特点外,会记录元素插入的顺序
mutable.queue
+=
添加单个元素;++=
添加多个元素dequeue
移除并返回队首元素mutable.stack
与不可变版本相同,除了会对原数据发生修改
mutable.bitset
直接修改原数据,更新操作比 immutable.bitset
更高效
如对本文有疑问, 点击进行留言回复!!
HBase Filter 过滤器之FamilyFilter详解
去 HBase,Kylin on Parquet 性能表现如何?
如何找到Hive提交的SQL相对应的Yarn程序的applicationId
网友评论