scala标准库里提供了常见的collection类,如List、Set、Map。

Set/Map有immutable、mutable两种,默认为immutable。在创建Set/Map对象时最好用完整的类名以便阅读区分。当然java里也可以通过Collections.unmodifiableMap/Set来创建immutable版的Set/Map..Set/Map默认都是HashSet/Map,有其它需求则可直接调用java标准库里的容器如TreeSet/Map等。

List只提供了一个immutable版,不过另外的ListBuffer可进行修改,姑且可当作mutable版的List使用。scala list实现为LinkedList,不适合随机访问,需要大量随机访问的还是直接使用java ArrayList方便。

既然可以直接调用java对象,那常见容器究竟是选用java collection呢还是scala collection?在能够满足功能需求情况下优先选取Scala里的,代码看着会简洁很多。

比如Set的一种常见使用场景:输入为数组或列表,在满足某种条件下选取部分元素以创建Set。

java代码如下:

int[] array = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Set<Integer> set = new HashSet<Integer>();
for (int num : array) {
   if (num % 2 == 0) {
       set.add(num * 2);
   }
}

对应scala代码为:

val array = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
val set = array.filter(_ % 2 == 0).map(_ * 2).toSet[Int]

scala代码精简很多,同时可读性也高。在使用Map、List时也是类似。