/** {@inheritDoc} */
 @Override
 public boolean equals(Object other) {
   if (!(other instanceof TLongFloatMap)) {
     return false;
   }
   TLongFloatMap that = (TLongFloatMap) other;
   if (that.size() != this.size()) {
     return false;
   }
   float[] values = _values;
   byte[] states = _states;
   float this_no_entry_value = getNoEntryValue();
   float that_no_entry_value = that.getNoEntryValue();
   for (int i = values.length; i-- > 0; ) {
     if (states[i] == FULL) {
       long key = _set[i];
       float that_value = that.get(key);
       float this_value = values[i];
       if ((this_value != that_value)
           && (this_value != this_no_entry_value)
           && (that_value != that_no_entry_value)) {
         return false;
       }
     }
   }
   return true;
 }
 /** {@inheritDoc} */
 public void putAll(TLongFloatMap map) {
   ensureCapacity(map.size());
   TLongFloatIterator iter = map.iterator();
   while (iter.hasNext()) {
     iter.advance();
     this.put(iter.key(), iter.value());
   }
 }
 @Override
 public TFloatCollection valueCollection() {
   synchronized (mutex) {
     if (values == null) values = new TSynchronizedFloatCollection(m.valueCollection(), mutex);
     return values;
   }
 }
 @Override
 public TLongSet keySet() {
   synchronized (mutex) {
     if (keySet == null) keySet = new TSynchronizedLongSet(m.keySet(), mutex);
     return keySet;
   }
 }
 /**
  * Creates a new <code>TLongFloatHashMap</code> instance containing all of the entries in the map
  * passed in.
  *
  * @param map a <tt>TLongFloatMap</tt> that will be duplicated.
  */
 public TLongFloatHashMap(TLongFloatMap map) {
   super(map.size());
   if (map instanceof TLongFloatHashMap) {
     TLongFloatHashMap hashmap = (TLongFloatHashMap) map;
     this._loadFactor = hashmap._loadFactor;
     this.no_entry_key = hashmap.no_entry_key;
     this.no_entry_value = hashmap.no_entry_value;
     //noinspection RedundantCast
     if (this.no_entry_key != (long) 0) {
       Arrays.fill(_set, this.no_entry_key);
     }
     //noinspection RedundantCast
     if (this.no_entry_value != (float) 0) {
       Arrays.fill(_values, this.no_entry_value);
     }
     setUp((int) Math.ceil(DEFAULT_CAPACITY / _loadFactor));
   }
   putAll(map);
 }
 @Override
 public boolean equals(Object o) {
   synchronized (mutex) {
     return m.equals(o);
   }
 }
 @Override
 public int hashCode() {
   synchronized (mutex) {
     return m.hashCode();
   }
 }
 @Override
 public boolean adjustValue(long key, float amount) {
   synchronized (mutex) {
     return m.adjustValue(key, amount);
   }
 }
 @Override
 public float adjustOrPutValue(long key, float adjust_amount, float put_amount) {
   synchronized (mutex) {
     return m.adjustOrPutValue(key, adjust_amount, put_amount);
   }
 }
 @Override
 public boolean containsValue(float value) {
   synchronized (mutex) {
     return m.containsValue(value);
   }
 }
 @Override
 public float[] values(float[] array) {
   synchronized (mutex) {
     return m.values(array);
   }
 }
 @Override
 public boolean forEachEntry(TLongFloatProcedure procedure) {
   synchronized (mutex) {
     return m.forEachEntry(procedure);
   }
 }
 @Override
 public boolean isEmpty() {
   synchronized (mutex) {
     return m.isEmpty();
   }
 }
 @Override
 public float putIfAbsent(long key, float value) {
   synchronized (mutex) {
     return m.putIfAbsent(key, value);
   }
 }
 @Override
 public boolean forEachValue(TFloatProcedure procedure) {
   synchronized (mutex) {
     return m.forEachValue(procedure);
   }
 }
 @Override
 public float getNoEntryValue() {
   return m.getNoEntryValue();
 }
 // these are unchanging over the life of the map, no need to lock
 @Override
 public long getNoEntryKey() {
   return m.getNoEntryKey();
 }
 @Override
 public TLongFloatIterator iterator() {
   return m.iterator(); // Must be manually synched by user!
 }
 @Override
 public String toString() {
   synchronized (mutex) {
     return m.toString();
   }
 }
 @Override
 public void transformValues(TFloatFunction function) {
   synchronized (mutex) {
     m.transformValues(function);
   }
 }
 @Override
 public int size() {
   synchronized (mutex) {
     return m.size();
   }
 }
 @Override
 public double distance(int i1, int i2) {
   return (i1 == i2) ? 0. : cache.get(makeKey(i1 + min, i2 + min));
 }
 @Override
 public boolean containsKey(long key) {
   synchronized (mutex) {
     return m.containsKey(key);
   }
 }
 @Override
 public long[] keys(long[] array) {
   synchronized (mutex) {
     return m.keys(array);
   }
 }
 @Override
 public float get(long key) {
   synchronized (mutex) {
     return m.get(key);
   }
 }
 @Override
 public float[] values() {
   synchronized (mutex) {
     return m.values();
   }
 }
 @Override
 public boolean retainEntries(TLongFloatProcedure procedure) {
   synchronized (mutex) {
     return m.retainEntries(procedure);
   }
 }
 @Override
 public long[] keys() {
   synchronized (mutex) {
     return m.keys();
   }
 }
 @Override
 public boolean increment(long key) {
   synchronized (mutex) {
     return m.increment(key);
   }
 }
 @Override
 public void clear() {
   synchronized (mutex) {
     m.clear();
   }
 }