Да, потому что это не способ удаления диапазона из внешнего кода. Вместо этого сделайте следующее:
list.subList(start, end).clear();
На самом деле это звонки removeRangeза кулисами. †
OP спрашивает, почему removeRangeне является частью Listобщедоступного API. Причина описана в правиле 40 2-го издания Effective Java, и я цитирую его здесь:
Есть три метода сокращения слишком длинных списков параметров. Один из них - разбить метод на несколько методов, каждый из которых требует только подмножества параметров. Если сделать это неаккуратно, это может привести к слишком большому количеству методов, но это также может помочь уменьшить количество методов за счет увеличения ортогональности. Например, рассмотрим java.util.Listинтерфейс. Он не предоставляет методов для поиска первого или последнего индекса элемента в подсписке, оба из которых требуют трех параметров. Вместо этого он предоставляет subListметод, который принимает два параметра и возвращает представление подсписка. Этот метод можно комбинировать с методами indexOfили lastIndexOf, каждый из которых имеет единственный параметр, чтобы получить желаемую функциональность. Более того,subListМетод можно комбинировать с любым методом, который работает с Listэкземпляром, для выполнения произвольных вычислений над подсписками. Полученный API имеет очень высокое соотношение мощности к весу.
Можно утверждать, что у removeRangeнего не так много параметров и, следовательно, он, вероятно, не является кандидатом для этого лечения, но, учитывая, что есть способ вызвать removeRangeчерез subList, нет причин загромождать Listинтерфейс избыточным методом.
† В AbstractList.removeRangeдокументации говорится:
Этот метод вызывается clearоперацией над этим списком и его подсписками. Переопределение этого метода для использования преимуществ внутренней реализации списка может существенно улучшить производительность clearоперации над этим списком и его подсписками.
Также см. Реализацию OpenJDK AbstractList.clearи SubList.removeRange.