@Override
  public V getOrDefault(Object key, V defaultValue) {
    if (key == null) return defaultValue;
    @SuppressWarnings("unchecked") K typedKey = (K)key;
    if (k1 != null) {
      if (strategy.equals(k1, typedKey)) {
        return v1;
      }
      if (k2 != null) {
        if (strategy.equals(k2, typedKey)) {
          return v2;
        }
        if (k3 != null) {
          if (strategy.equals(k3, typedKey)) {
            return v3;
          }
        }
      }
    }
    if (data.length == 0) return defaultValue;
    int pos = tablePos(strategy, data, typedKey);
    @SuppressWarnings("unchecked")
    V v = pos < 0 ? defaultValue : (V)data[pos + 1];
    return v;
  }
@Override
  public V getOrDefault(Object key, V defaultValue)