Я не вижу, где используется CompareTo; javadoc для remove () для интерфейса Map говорит: «Более формально, если эта карта содержит отображение ключа k на значение v, такое что (key == null? k == null: key.equals (k)) это отображение устранен." В то время как для интерфейса Set он аналогично говорит: «Более формально, удаляет элемент e такой, что (o == null? E == null: o.equals (e)), если набор содержит такой элемент."
Обратите внимание, что в javadoc removeAll () не сказано, как он работает, а это означает, что, как говорили другие, это деталь реализации.
В Sun Java, согласно Блоху в его «Эффективной Java» (если я правильно помню), он перебирает коллекцию и вызывает метод remove (), но он подчеркивает, что вы никогда не должны предполагать, что это всегда так.