ConcurrentSkipListMap не может иметь ключ, который не является сопоставимым, верно? - PullRequest
0 голосов
/ 11 мая 2018

Эта часть в документах API одинакова как для TreeMap, так и для ConcurrentSkipListMap.

Карта сортируется в соответствии с естественным упорядочением ее ключей или с помощью компаратора, предоставленного во время создания карты, в зависимости откакой конструктор используется.

Идеологически ConcurrentSkipListMap (являющийся NavigableMap) должен быть отсортирован (и, таким образом, внутренне поддерживать порядок), как TreeMap.Не будучи сопоставимым (если мы не указываем никакого специального компаратора в конструкторе), 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!

1 Ответ

0 голосов
/ 11 мая 2018

Не выдается исключение для клавиши first . Будет добавлено исключение, если вы добавите второй ключ. Это просто потому, что ConcurrentSkipListMap не имеет специальной логики для проверки того, что первый ключ сопоставим, но он был добавлен для TreeMap. Я подозреваю, что это просто упущение JDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...