@Override
  public int hashCode() {
    int h = 0;
    if (k1 != null) {
      h += strategy.hashCode(k1) ^ Objects.hashCode(v1);
      if (k2 != null) {
        h += strategy.hashCode(k2) ^ Objects.hashCode(v2);
        if (k3 != null) {
          h += strategy.hashCode(k3) ^ Objects.hashCode(v3);
        }
      }
    }
    for (int i = 0; i < data.length; i += 2) {
      @SuppressWarnings("unchecked") K key = (K)data[i];
      if (key != null) {
        h += strategy.hashCode(key) ^ Objects.hashCode(data[i + 1]);
      }
    }
    return h;
  }
@Override
  public int hashCode()