fix hashcode and equal