/** * @param initialCapacity for the map to override {@link #MIN_CAPACITY} * @param loadFactor for the map to override {@link Hashing#DEFAULT_LOAD_FACTOR}. * @param shouldAvoidAllocation should allocation be avoided by caching iterators and map entries. */ public Object2ObjectHashMap(final int initialCapacity, final float loadFactor, final boolean shouldAvoidAllocation) { validateLoadFactor(loadFactor); this.loadFactor = loadFactor; this.shouldAvoidAllocation = shouldAvoidAllocation; capacity(findNextPositivePowerOfTwo(Math.max(MIN_CAPACITY, initialCapacity))); }
private void rehash(final int newCapacity) { final Object[] oldEntries = entries; final int length = entries.length; capacity(newCapacity); final Object[] newEntries = entries; final int mask = entries.length - 1; for (int keyIndex = 0; keyIndex < length; keyIndex += 2) { final Object value = oldEntries[keyIndex + 1]; if (value != null) { final Object key = oldEntries[keyIndex]; int index = Hashing.evenHash(key.hashCode(), mask); while (newEntries[index + 1] != null) { index = next(index, mask); } newEntries[index] = key; newEntries[index + 1] = value; } } }
/** * @param initialCapacity for the map to override {@link #MIN_CAPACITY} * @param loadFactor for the map to override {@link Hashing#DEFAULT_LOAD_FACTOR}. * @param shouldAvoidAllocation should allocation be avoided by caching iterators and map entries. */ public Object2ObjectHashMap(final int initialCapacity, final float loadFactor, final boolean shouldAvoidAllocation) { validateLoadFactor(loadFactor); this.loadFactor = loadFactor; this.shouldAvoidAllocation = shouldAvoidAllocation; capacity(findNextPositivePowerOfTwo(Math.max(MIN_CAPACITY, initialCapacity))); }
private void rehash(final int newCapacity) { final Object[] oldEntries = entries; final int length = entries.length; capacity(newCapacity); final Object[] newEntries = entries; final int mask = entries.length - 1; for (int keyIndex = 0; keyIndex < length; keyIndex += 2) { final Object value = oldEntries[keyIndex + 1]; if (value != null) { final Object key = oldEntries[keyIndex]; int index = Hashing.evenHash(key.hashCode(), mask); while (newEntries[index + 1] != null) { index = next(index, mask); } newEntries[index] = key; newEntries[index + 1] = value; } } }