Add hashcode, equals, and toString methods