在插入元素时尝试抛出异常,将需要扫描地图中的所有现有元素以验证它们是否可以与您要插入的元素进行比较,这对性能和可扩展性非常不利。同样,当您引发比较并在翻译时捕获异常,这将增加每次正确使用地图都会浪费的开销。这并不是Clojure中唯一需要了解涉及的数据结构实际合同并在使用时正确使用它们或最终得到意外结果,以性能为代价的情况。(更不用说,还需要特殊面向Clojure的Java类的全部实现来添加这些功能。)
在这种情况下,涉及的数据结构是Java的`SortedMap`接口。以下是JavaDoc的第二个段落
插入到有序映射中的所有键必须实现`Comparable`接口(或由指定的比较器接受)。此外,所有此类键必须可以相互比较:`k1.compareTo(k2)`(或`comparator.compare(k1, k2)`)对于有序映射中的任何键`k1`和`k2`都不能抛出`ClassCastException`。尝试违反此限制将导致引发`ClassCastException`的受影响的方或构造函数调用。
随着你对JVM Clojure的了解深入,不可避免地需要了解它构建在哪个Java类库上以及与之交互的细节。话虽如此,从Clojure文档中链接此JavaDoc并或许将其总结/翻译成Clojure术语可能会很有用。