Согласно Java API
NoSuchElementException
Брошенный методом nextElement
Перечисление, чтобы указать, что есть
элементов в перечислении больше нет.
Я тестировал следующий код локально
ConcurrentHashMap<String, String> t = new ConcurrentHashMap<String, String>();
List<String> al = new ArrayList<String>(t.values());
Collections.sort(al);
System.out.println("no bugs");
(с Eclipse jdk 1.5) Я получаю ожидаемый результат. Я также запустил свой локальный тест после помещения некоторых пар ключ-значение в ConcurrentHashMap, и у меня не было проблем. Исходя из моих успехов, может показаться, что одно (или оба) из следующего вызывает расхождение между нашими результатами.
A) Мы используем разные реализации классов (я использую java.util.concurrent.ConcurrentHashMap, java.util.List, java.util.ArrayList из jdk 1.5)
B) Вы изменяете содержимое ArrayList
или ConcurrentHashMap
, пока итератор итерирует содержимое указанного объекта. Возникает ли исключение при выполнении сортировки? Мое лучшее предположение, что другой поток связывается с вашим ArrayList
(поскольку ConcurentHashMap
должен быть безопасным для потоков) во время сортировки.