I think the current state of the art is to do something like:

  int hc = key.hashCode();
  hc *= 31;
  hc += value.hashCode();
  return hc;

But actually for an attribute there aren't too many that can can be multi-valued, are there?  So just using the key's hashCode as our own hashCode might be sufficient here.