Using Custom Objects in Sets and as Keys in Maps