Почему коллекции 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 миллисекунды

0 ответов

Другие вопросы по тегам