Почему коллекции Koloboke HashObjObjMaps настолько медленны в putIfAbsent при использовании Longs в качестве ключей?
Следующий код показывает, что карты Koloboke HashHashObjs очень медленны в putIfAbsent, есть ли здесь недостаток дизайна?
import com.koloboke.collect.map.hash.HashObjObjMaps;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class Koloboke {
public static void main(String [] args) {
Map<Long, String> normalMap = new HashMap<>();
Map<Long, String> kolobokeMap = HashObjObjMaps.newMutableMap();
long iterations = 100_000;
for(long i = 0;i<iterations;i++) {
normalMap.put(i, Long.toString(i));
kolobokeMap.put(i, Long.toString(i));
}
long nanoStart= System.nanoTime();
for(long i = 0;i<iterations;i++) {
normalMap.putIfAbsent(i, Long.toString(i));
}
System.out.println("hashmap putIfAbsent took " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime()-nanoStart) + " millis");
nanoStart= System.nanoTime();
for(long i = 0;i<iterations;i++) {
kolobokeMap.putIfAbsent(i, Long.toString(i));
}
System.out.println("koloboke putIfAbsent took " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime()-nanoStart) + " millis");
}
}
Выход:
hashmapputIfAbsent занял 27 миллисекунд
колобоке putIfAbsent заняло 19733 миллисекунды