Existe alguma diferença de desempenho em carregar Arrays de objetos no formato de Vector, ArrayList ou Object[] (Array) ?
O Array puro é mais rápido que qualquer um dos outros.
Mas acho que vale a pena a “perda” de performance usando uma Collection, vendo que seu manuseio é bem mais simples
Não que você vá reparar em 99.9% dos casos.
Shoes
Bom, agora estou meio que na mesma hehe.
Maurício disse que é mais rápido.
Andre_a_s disse que vale a pena a “perda” em troca da facilidade de manuseio.
Pcalcado disse que raramente vai ser reparado…
E agora ?
Olá fitoplancton,
Na verdade vai depender da sua necessidade, por exemplo, o array puro é mais rápido, porém não te oferece segurança, o Vector e o ArrayList são implementados com o mesmo algoritimo, porém o Vector possui blocos syncronized em seus métodos tornando - o thread-safe porém mais lento q o ArrayList. Depende, cada caso é um caso.
Abraço.
Eu prefiro o ArrayList pelo facilidade de percorrer os elementos e pela flexibilidade.
Concordo com o Phillip de que não se nota a diferença a olho nu entre eles.
Então eu fico com o arraylist.
PS. Só uso o vector quando tiver a necessidade de ser thread-safe
Só lembrando que sempre que for percorrer uma Collection é sempre legal usar o Iterator
Use ArrayLists (preferencialmente com generics) como implementação, mas evite trabalhar diretamente com implementações, use java.util.List e java.util.Collection para manipulá-los.
Do pontod e vista de quem trabalha com aplicativos de tempo real: você vai ter um milhão de outros gargalos em outras coisas (geralmente os gargalos estão na arquitetura), não se preocupe com isso por enquanto.
Shoes
Agora sim, muito obrigado !
Usando o Iterator é um boa ou continuo usando o bom e velho loop for ?
E uma outra perguntinha, um amigo meu me disse que fazendo um loop do maior valor para o menor é mais rápido do que o tradicional, por exemplo:
Esse: for (int i = 10000; i > 0; i–)
É mais rápido que esse: for (int i = 0; i < 10000; i++)
:?: :?: :?:
Hum, podia até ser naquele tempo em que você escrevia em Assembly e testar contra zero era mais rápido que testar contra 10000.
Hoje em dia provavelmente pode ocorrer uma de duas coisas:
- Ou dar na mesma,
- Ou então ser mais lento ou mais rápido, dependendo do layout dos seus dados na memória.
Ou seja, só vá de trás para frente se fizer sentido, não para ser mais rápido.
O que pode ser mais lento é quando você tem algo como:
for (int i = 0; i < colecao.size(); i++) {
}
onde você tem de ficar chamando N vezes o método size() só para determinar o fim do loop. Aí realmente ir de trás para frente faça algum sentido, porque você vai testar contra o valor FIXO 0, não contra o valor VARIÁVEL size().