在插入元素时尝试抛出异常,需要扫描图中所有现有元素以验证它们是否与您要插入的元素可比较,这对性能和可扩展性会产生极大的负面影响。同样,在您强制进行比较并将其转换为 `nil` 时捕获异常,也会添加额外的开销,这在正确使用映射时会被浪费。这不是 Clojure 中需要理解涉及的实际契约并且正确使用它们才能得到预期结果的唯一情况,否则可能会因为性能而得到意想不到的结果。(更不用说还需要特殊的 Clojure 面向所有基础 Java 类的实现来添加这些功能。)
在这种情况下,相关数据结构是 Java 的 `SortedMap` 接口。以下是可以从 JavaDoc 的第二段看到的内容:
所有插入到排序映射中的键都必须实现 `Comparable` 接口(或者被指定的比较器接受)。此外,所有此类键都必须彼此可比较:`k1.compareTo(k2)`(或 `comparator.compare(k1, k2)`)不能为排序映射中的任何键 `k1` 和 `k2` 抛出 `ClassCastException`。违反此限制的尝试将导致引发异常的方法或构造函数调用抛出 `ClassCastException`。
随着您对 JVM Clojure 的深入了解,不可避免地需要学习它所构建和互操作的 Java 类库的细节。因此,在 Clojure 的文档字符串中提供一个指向此 JavaDoc 的链接,以及可能将其总结/翻译成 Clojure 术语,可能会非常有用。