Problema con el método hashset "contiene" (Java)

El siguiente código no me da el resultado que estoy esperando:

public static void main (String[] args) {

    Set<Pair> objPair = new LinkedHashSet<Pair>();
    objPair.add(new Pair(1, 0));

    System.out.println("Does the pair (1, 0) exists already? "+objPair.contains(new Pair(1, 0)));

}

private static class Pair {

    private int source;
    private int target;

    public Pair(int source, int target) {
      this.source = source;
      this.target = target;
    }        
}

El resultado será:

Does the pair (1, 0) exists already? false

No puedo entender por qué no está funcionando. O tal vez estoy usando el método "contiene" incorrecto (o por razones incorrectas).

También hay otro problema, si agrego el mismo valor dos veces, se aceptará, incluso siendo un conjunto

objPair.add(new Pair(1, 0));
objPair.add(new Pair(1, 0));

¿No aceptará / reconocerá la clase Pair que he creado?

Gracias por adelantado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta