import java.util.HashSet;

// Error común: hacer override de equals y no de hashCode. Dos claves iguales
// caen en buckets distintos del HashSet, y contains no encuentra la segunda.
public class HashDemo {
    // javac -Xlint:all avisa [overrides]; aquí lo callamos a propósito.
    @SuppressWarnings("overrides")
    static final class Code {
        private final String value;

        Code(String value) {
            this.value = value;
        }

        @Override
        public boolean equals(Object o) {
            return o instanceof Code c && value.equals(c.value);
        }
        // falta hashCode: se hereda el de Object, que depende del objeto
    }

    public static void main(String[] args) {
        Code a = new Code("P-100");
        Code b = new Code("P-100");
        IO.println("a.equals(b): " + a.equals(b));
        IO.println("mismo hash: " + (a.hashCode() == b.hashCode()));

        HashSet<Code> set = new HashSet<>();
        set.add(a);
        IO.println("set.contains(a): " + set.contains(a));
        IO.println("set.contains(b): " + set.contains(b));
        set.add(b);
        IO.println("tamaño: " + set.size());
    }
}
