Am I doing something wrong? I wouldn’t expect the second one to have a faster result…
Output:
Average 1: 7.33694838
Average 2: 4.06036178
package dane.game.model;
import java.util.HashMap;
import java.util.Map;
public class KeyValue {
private Map<Object, Object> keyvalues = new HashMap<>();
public <T> T set(Object key, T value) {
keyvalues.put(key, value);
return value;
}
public <T> T get(Object key) {
return get(key, null);
}
@SuppressWarnings("unchecked")
public <T> T get(Object key, T defaultValue) {
if (!keyvalues.containsKey(key)) {
keyvalues.put(key, defaultValue);
}
return (T) keyvalues.get(key);
}
}
package dane.game.world;
import dane.game.model.KeyValue;
public class Entity extends KeyValue {
static final int ITERATIONS = 1_000_000;
static final double NS_TO_MS = 1_000_000.0;
public static void main(String[] args) {
Entity e = new Entity();
// set values
e.set("x", 0);
e.set("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", 0);
double total1 = 0, total2 = 0;
for (int n = 0; n < 100; n++) {
long time = System.nanoTime();
for (int i = 0; i < ITERATIONS; i++) {
e.get("x");
}
total1 += (System.nanoTime() - time) / NS_TO_MS;
time = System.nanoTime();
for (int i = 0; i < ITERATIONS; i++) {
e.get("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");
}
total2 += (System.nanoTime() - time) / NS_TO_MS;
}
System.out.println("Average 1: " + (total1 / 100));
System.out.println("Average 2: " + (total2 / 100));
}
}