A um tempo atrás apareceu um tópico sobre inverter um vector (
http://www.guj.com.br/java/294926-inverter-um-vector ).
Sugeriram o uso de
Collections.reverse(vector);
Mas, como isso deve ser um exercício, a resposta correta não deveria ser esta.
Baseado no tópico escrevi o seguinte código:
private static Vector<Integer> revertUsingGet(Vector<Integer> vet) {
for(int j = 0; j < vet.size() / 2; ++j) {
Integer first = vet.get(j);
int lastIndex = vet.size() - 1 - j;
Integer last = vet.get(lastIndex);
vet.remove(j);
vet.add(j, last);
vet.remove(lastIndex);
vet.add(lastIndex, first);
}
return vet;
}
porém
não é performático.
A entrada de dados que estou usando é:
Vector<Integer> vet = new Vector<Integer>();
for (int i = 0; i < 100000; i++) {
vet.add(i);
}
está levando um tempo entre 8 e 9 segundos para resolver. O reverse do Collections leva em torno de 25 milisegundos.
Gostaria de ver o mesmo resultado, porém otimizado (algo mais próximo ao reverse da classe Collections).
PS:
1- Eu já fiz minha otimização mas não vou postar para não influenciar a decisão de ninguém ;)
2- Use valores menores na entrada (ex.: 10 ao invés de 100000) para facilitar testes.
3- Usei vector pois era a classe utilizada, mas poderia ser um ArrayList.