Так, оскільки це не спосіб видалення діапазону із зовнішнього коду. Натомість зробіть це:
list.subList(start, end).clear();
Це насправді викликає removeRangeкуліси. †
ОП запитує, чому removeRangeце не є частиною Listпублічного API. Причина описана у пункті 40 Ефективної Java 2nd ed, і я цитую її тут:
Існує три методи скорочення занадто довгих списків параметрів. Один полягає в тому, щоб розбити метод на кілька методів, кожен з яких вимагає лише підмножини параметрів. Якщо зробити це необережно, це може призвести до занадто багатьох методів, але це також може допомогти зменшити кількість методів шляхом збільшення ортогональності. Наприклад, розглянемо java.util.Listінтерфейс. У ньому не передбачено методів пошуку першого чи останнього індексу елемента в підспілі, для обох яких знадобиться три параметри. Натомість він забезпечує subListметод, який приймає два параметри та повертає перегляд підпису. Цей спосіб може поєднуватися з методами indexOfабо lastIndexOf, кожен з яких має єдиний параметр, щоб отримати бажану функціональність. Більше того,subListметод може бути поєднаний з будь-яким методом, який працює над Listекземпляром для виконання довільних обчислень у списках. Отриманий API має дуже високе співвідношення потужності до ваги.
Можна стверджувати, що removeRangeне має такої кількості параметрів і тому, ймовірно, не є кандидатом на це лікування, але, враховуючи, що існує спосіб викликати removeRangeчерез subList, немає причин захаращувати Listінтерфейс надмірним методом.
†AbstractList.removeRange документація говорить:
Цей метод викликається clearоперацією у цьому списку та його підсписками. Перевизначення цього методу, щоб скористатися внутрішніми можливостями реалізації списку, може істотно підвищити ефективність clearоперації в цьому списку та його підсписках.
Також див. Реалізацію AbstractList.clearта SubList.removeRange. OpenJDK .