Ho provato a creare la mia mappa per aumentare le prestazioni per un ambiente speciale e ho realizzato qualcosa di molto interessante: la creazione di uno new Hashmap<Integer,String>(2000)
è più veloce di new Object[2000]
- non importa in quale ordine eseguo questi comandi. Questo è abbastanza confuso per me, esp. perché il costruttore di hashmap contiene un table = new Entry[capacity]
, in base a this. C'è qualcosa di sbagliato nel mio banco di prova?Perché la creazione di una HashMap è più veloce della creazione di un oggetto []?
public static void test(int amm){ //amm=1_000_000
Map<Integer,String> m1 = null;
Object[] arr = null;
long time = System.nanoTime();
for(int i = 0; i < amm; i++){
m1 = new HashMap<Integer, String>(2000);
}
System.out.println("m1: " + (System.nanoTime() - time)); //m1: 70_455_065
time = System.nanoTime();
for(int i = 0; i < amm; i++){
arr = new Object[2000];
}
System.out.println("arr: " + (System.nanoTime() - time)); //arr: 1_322_473_803
}
Mi piacerebbe vedere i risultati dei test su un altro computer. Non ho idea del perché la creazione di un HashMap
è 10 volte più veloce rispetto alla creazione di un Object[]
.
Dipende dall'implementazione JDK. Quale JDK e versione stai usando per eseguire questo test? – BladeCoder
@BladeCoder Sto usando 1.7.0_79 (IceTea 2.5.5) (7u79-2.5.5-0ubuntu0.14.04.2) e mi riferisco a java.version. –
Infatti, in una versione chiusa di OpenJDK 1.7, nessun array è inizializzato nel costruttore di HashMap (è fatto al primo inserimento) che spiega il divario di velocità: http://grepcode.com/file_/repository.grepcode.com/java/ root/jdk/openjdk/7u40-b43/java/util/HashMap.java /? v = source – BladeCoder