Sim, porque não é assim que você remove um intervalo de um código externo. Em vez disso, faça o seguinte:
list.subList(start, end).clear();
Isso realmente chama removeRangeos bastidores. †
O OP pergunta por que removeRangenão faz parte da ListAPI pública. O motivo é descrito no Item 40 do Effective Java 2 ed, e eu o cito aqui:
Existem três técnicas para encurtar listas de parâmetros excessivamente longas. Uma é dividir o método em vários métodos, cada um dos quais requer apenas um subconjunto dos parâmetros. Se feito de forma descuidada, isso pode levar a muitos métodos, mas também pode ajudar a reduzir a contagem de métodos, aumentando a ortogonalidade. Por exemplo, considere a java.util.Listinterface. Ele não fornece métodos para encontrar o primeiro ou o último índice de um elemento em uma sublista, pois ambos exigiriam três parâmetros. Em vez disso, ele fornece o subListmétodo, que usa dois parâmetros e retorna uma visualização de uma sublista. Este método pode ser combinado com os métodos indexOfou lastIndexOf, cada um dos quais tem um único parâmetro, para produzir a funcionalidade desejada. Além disso, osubListO método pode ser combinado com qualquer método que opere em uma Listinstância para realizar cálculos arbitrários em sublistas. A API resultante tem uma relação potência-peso muito alta.
Pode-se argumentar que removeRangenão tem tantos parâmetros e, portanto, provavelmente não é um candidato para esse tratamento, mas dado que há uma maneira de invocar removeRangepor meio do subList, não há razão para sobrecarregar a Listinterface com um método redundante.
† A AbstractList.removeRangedocumentação diz:
Este método é chamado pela clearoperação nesta lista e suas subListas. Substituir este método para tirar proveito dos elementos internos da implementação da lista pode melhorar substancialmente o desempenho da clearoperação nesta lista e em suas subListas.
Além disso, consulte a implementação do OpenJDK de AbstractList.cleare SubList.removeRange.