code: @Override
    public V put(K key, V value)
    {
      if (key == null) {
        V item = _nullValue;
  
        _nullValue = value;
  
        return item;
      }
  
      // forced resizing if 1/2 full
      if (_values.length <= 2 * _size) {
        K []oldKeys = _keys;
        V []oldValues = _values;
  
        _keys = (K []) new Object[2 * oldKeys.length];
        _values = (V []) new Object[2 * oldValues.length];
  
        _mask = _values.length - 1;
        _size = 0;
  
        for (int i = oldValues.length - 1; i >= 0; i--) {
          K oldKey = oldKeys[i];
          V oldValue = oldValues[i];
  
          if (oldValue != null)
            putImpl(oldKey, oldValue);
        }
      }
      
      V item = putImpl(key, value);
  
      return item;
    }
docs: Puts a new item in the cache.
  
  @param key key to store data
  @param value value to be stored
  
  @return old value stored under the key