API文档中的这一部分对于TreeMap和ConcurrentSkipListMap都是相同的。
地图根据其键的自然顺序排序,或者按照 比较器在地图创建时提供,具体取决于哪个 使用构造函数。
在意识形态上,ConcurrentSkipListMap(是一个NavigableMap)应该像TreeMap一样进行排序(从而在内部维护顺序)。没有Comparable(如果我们在构造函数中没有指定特殊的Comparator),ConcurrentSkipListMap不能保持任何顺序。
但是与TreeMap不同,如果给出一个不可比较的键,ConcurrentSkipListMap不会抛出任何异常!这让我很困惑,为什么:
TreeMap<ArrayList, Integer> m = new TreeMap<>();
m.put(new ArrayList(), 6); // throws ClassCastException - ArrayList not Comparable
ConcurrentSkipListMap<ArrayList, Integer> lst = new ConcurrentSkipListMap<>();
lst.put(new ArrayList(), 6); // fine!
答案 0 :(得分:0)
它不会在第一个键上抛出异常。如果添加第二个密钥,它会抛出异常。这只是因为ConcurrentSkipListMap
没有特殊逻辑来验证第一个密钥是否具有可比性,但是为TreeMap
添加了该密钥。我怀疑这只是JDK的疏忽。