Skip to content

集合 ​

Java 集合转换入口见 sequences.norm,真实 Java 边界契约见 JavaCollectionTaskInteropTest。

Norm 集合是类型化 value 容器。全部泛型实参都必须写出,raw type 非法。

norm
List<Integer> first = [1, 2, 3]
List<Integer> second = first
second.add(4)

执行后 first 的结构不变。若元素是 class,两个容器仍然保存同一对象身份。

类型 ​

类型用途
Array<T>固定长度、连续索引序列
List<T>可增长的有序序列
Map<K, V>唯一键到值的映射
Set<T>按 equality 与 hash 去重
Stack<T>LIFO 序列
Queue<T>FIFO 序列
Deque<T>双端序列
Pair<A, B>两个类型化值的组合
Range右端不包含的整数区间

缺失与越界 ​

map[key] 要求键存在,map.get(key:) 在缺失时返回 null。List 与 Array 索引要求下标有效。需要区分缺失键和已保存的 nullable 值时使用 containsKey(key:)。

迭代 ​

Array、List、Set、Stack、Queue、Deque 与 Range 显式实现 Iterable<T>,因此 for element : values 可以从该 interface 的类型实参推断循环变量。Map 实现 Iterable<Pair<K, V>>。Stack 从栈顶到栈底迭代;通用 Map 和 Set 不承诺遍历顺序。

Array、List、Map、Set、Stack、Queue、Deque 与 Range 统一使用 size() 返回元素数量,不提供 length 属性。

Java 引用集合由 java.base 声明;mutableMap 通过普通绑定构造共享身份的 Java Map。其调用方式和迭代规则见 Java 绑定。

序列成员 ​

norm
Integer last = values.last()
List<Integer> result = values.reversed()
List<Integer> zeros = List.filled(size: 8, value: 0)

Array<T> 和 List<T> 的 reversed() 返回独立副本;List<T>.removeLast() 删除并返回尾元素。Array.filled 与 List.filled 是通过类型名称调用的泛型类型级成员。

std.collections 提供自然顺序 sort,使用时导入具体函数:

norm
import std.collections.sort

List<Integer> ordered = sort(values: values)

完整签名以 std.collections.sequences 与 std.collections.mutable 为准。

Norm 0.25