code: @Override
    public VType put(KType key, VType value) {
      assert assigned < mask + 1;
  
      final int mask = this.mask;
      if (Intrinsics.<KType> isEmpty(key)) {
        hasEmptyKey = true;
        VType previousValue = Intrinsics.<VType> cast(values[mask + 1]);
        values[mask + 1] = value;
        return previousValue;
      } else {
        final KType[] keys = Intrinsics.<KType[]> cast(this.keys);
        int slot = hashKey(key) & mask;
  
        KType existing;
        while (!Intrinsics.<KType> isEmpty(existing = keys[slot])) {
          if (Intrinsics.<KType> equals(this, key, existing)) {
            final VType previousValue = Intrinsics.<VType> cast(values[slot]);
            values[slot] = value;
            return previousValue;
          }
          slot = (slot + 1) & mask;
        }
  
        if (assigned == resizeAt) {
          allocateThenInsertThenRehash(slot, key, value);
        } else {
          keys[slot] = key;
          values[slot] = value;
        }
  
        assigned++;
        return Intrinsics.<VType> empty();
      }
    }
docs: {@inheritDoc}