Olá pessoal, recentemente fiz um mini-aplicativo muito interessante que realiza N loops de escrita (utilizando geralmente o método add() ou put()) de objetos utilizando quase todas as variações polimórficas de instânciar uma mesma classe da API Collection do Java, medindo assim o tempo em Millisegundos dos loops de execução de cada tipo de estrutura List, ArrayList, Set, HashSet, Map, HashMap e etc.
Por exemplo abaixo segue alguns dos testes que realizo:
// Testando Instância pura de um ArrayList
private void testingArrayList(int max) {
ArrayList<Object> array = new ArrayList<Object>();
long start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
array.add(i);
}
long end = System.currentTimeMillis();
long time = (end - start);
System.out.println("Tempo: "+time);
}
// Testando Instância polimórfica de um ArrayList com List
private void testingList2ArrayList(int max) {
List<Object> array = new ArrayList<Object>();
long start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
array.add(i);
}
long end = System.currentTimeMillis();
long time = (end - start);
System.out.println("Tempo: "+time);
}
// Testando Instância polimórfica de um ArrayList com uma Collection
private void testingCollection2ArrayList(int max) {
Collection<Object> array = new ArrayList<Object>();
long start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
array.add(i);
}
long end = System.currentTimeMillis();
long time = (end - start);
System.out.println("Tempo: "+time);
}
Resultado de alguns dos testes:
ArrayList -> ArrayList | 5 milliseconds.
List -> ArrayList | 6 milliseconds.
Collection -> ArrayList | 7 milliseconds.
Em muito desses testes a diferença de tempo é perceptível, por mais que esses tempos NÃO signifiquem muita diferença em questão de performance.
É óbvio que exista diferença de tempo entre dois ou mais tipos de estrutura distintos, exemplo ArrayList, LinkedList, Set, Maps, pois cada um possuem suas características peculiares
Porém a minha dúvida é se alguém sabe me explicar, porque dessas diferenças em casos de utilização de uma mesma estrutura que é o caso citado acima, pois está utilizando apenas a estrutura ArrayList.
O código fonte esta nesse link para conferir os inúmeros testes de benchmark que fiz:
espero que gostem e se alguém descobrir me avisem!