在插入元素时尝试抛出异常会要求扫描映射中所有现有元素以验证它们是否与您要插入的元素可比较,这将严重影响性能和可扩展性。同样,在引发比较和将其转换为 `nil` 时捕获异常也会增加不必要的开销。这并非 Clojure 中需要理解相关数据结构实际契约并正确使用它们的唯一情况,否则会得到意想不到的结果,牺牲性能。(更不用说还需要特殊 Clojure 定制化的所有底层 Java 类来实现这些功能。)
在这种情况下,涉及到的数据结构是 Java 的 `SortedMap` 接口。以下是 Java Doc 的第二段内容:
所有插入到有序映射中的键都必须实现 `Comparable` 接口(或被指定的比较器接受)。此外,所有这些键必须相互可比较:`k1.compareTo(k2)`(或 `comparator.compare(k1, k2)`)不能在有序映射中的任何键 `k1` 和 `k2` 上抛出 `ClassCastException`。违反此限制的尝试将导致引发 `ClassCastException` 的有问题方法或构造函数调用。
当您深入了解 JVM Clojure 时,不可避免地需要了解它基于并与之交互的 Java 类库的详细信息。也就是说,提供一个指向这个 Java Doc 的链接,以及 perhaps 将其概括/翻译成 Clojure 语汇的摘要,可能对 Clojure 文档字符串很有用。