Pq o método "removeRange" da classe Vector é protected?

9 respostas
java_child

Olá pessoal!

Estou com uma dúvida conceitual. Gostaria de saber o porquê de o método removeRange(int index, int index) ser protected. Por que só classes herdeiras de Vector podem usá-la??? Se alguém souber, por favor me responda! :slight_smile:

9 Respostas

jonataswingeter

Porquê a operação clear do Vector usa este método internamente, e então, ele deve garantir alguma consistência.
Ele foi colocado protected para que somente através da herança seja possível sobre-escrevê-lo e implementá-lo.
Se sobre-escrevê-lo, dependendo do seu algorítimo, pode obter performance melhor na operação clear.

Portanto, o intuito dele não é disponibilizá-lo livremente ao programador porque é usado internamente.

Att.

java_child

Agora entendi!!! Obrigada!
Como o que eu queria era remover todos os itens a partir de um certo índice até o final, eu resolvi meu problema usando o método setSize. Não sei se existe forma melhor, mas deu certo!!! :smiley:

java_child

:smiley:

jonataswingeter

Olá.

o setSize não é recomendável para este tipo de operação, até porque não tem como você definir o início da remoção.

Você deve usar deste modo:

//v é uma referência de Vector. v.subList(inicio, fim).clear();

Fácil não? :smiley:

Att.

pcalcado

Olá,

A menos que voce tenha um bom motivo para usar Vector (e isso só é possível com Threads) utilize ArrayList.

jonataswingeter

É verdade.

Caso a List precise ser Thread-safe, pode usar Collections.synchronizedList().

pcalcado

Não e tão simples quanto criar um proxy sincronizdo para uma lista. Se você precisa de sincronização deve primeiro estudar muito bem porque precisa para definir se utilizará uma estrutura de dados sincronizada ou fará sincronização manual. Muitas vezes é besteira utilizar estruturas sincronizadas podendo criack monitores paenas nas operações mais críticas, tudo depende.

jonataswingeter

Claro.

Mas nosso colega não postou nenhum código de forma que olhássemos para discutir qual a melhor técnica. :slight_smile:

Ele poderia usar o proxy sincronizado…mas se usasse, por exemplo, o iterador, deveria estar atento também.

Sem dúvida, é necessário estudar o fonte e ver se realmente é necessário.

java_child

No momento, creio que seja melhor continuar usando o Vector, pois o sistema todo está assim e, inclusive, essa lista que eu quero remover itens vem de uma variável de sessão, que é setada como Vector. Posso estudar melhor o assunto e propor à minha chefia uma avaliação, mas no momento é inviável.

Muito obrigada pela ajuda de vocês!!! :smiley:

Criado 1 de fevereiro de 2007
Ultima resposta 5 de fev. de 2007
Respostas 9
Participantes 3