private CharKeyOpenHashMap(
     CharHashFunction keyhash,
     int capacity,
     int growthPolicy,
     double growthFactor,
     int growthChunk,
     double loadFactor) {
   if (keyhash == null) Exceptions.nullArgument("hash function");
   if (capacity < 0) Exceptions.negativeArgument("capacity", String.valueOf(capacity));
   if (growthFactor <= 0.0)
     Exceptions.negativeOrZeroArgument("growthFactor", String.valueOf(growthFactor));
   if (growthChunk <= 0)
     Exceptions.negativeOrZeroArgument("growthChunk", String.valueOf(growthChunk));
   if (loadFactor <= 0.0)
     Exceptions.negativeOrZeroArgument("loadFactor", String.valueOf(loadFactor));
   this.keyhash = keyhash;
   capacity = Primes.nextPrime(capacity);
   keys = new char[capacity];
   values = (Object[]) new Object[capacity];
   this.states = new byte[capacity];
   size = 0;
   expandAt = (int) Math.round(loadFactor * capacity);
   this.used = 0;
   this.growthPolicy = growthPolicy;
   this.growthFactor = growthFactor;
   this.growthChunk = growthChunk;
   this.loadFactor = loadFactor;
 }