Потому что всё-таки это два разных объекта. Чтобы hashCode возвращал значение, привязанное к атрибутам объекта, нужно в классе Card переопределить метод hashCode (а заодно и equals, чтобы соблюсти контракт) с кастомным подсчётом хеша, иначе всё будет происходить соответственно докции:
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the Java™ programming language.)