Understanding contiene el método de Java HashSet

Newbie question about java HashSet

Set<User> s = new HashSet<User>();
User u = new User();
u.setName("name1");
s.add(u);
u.setName("name3");
System.out.println(s.contains(u));

¿Alguien puede explicar por qué este código genera falso? Además, este código ni siquiera llama al método igual del Usuario. Pero según las fuentes de HashSet y HashMap tiene que llamarlo. Método igual a Usuario simplemente llama a iguales en nombre del usuario. Método hashCode return hashCode del nombre de usuario

Respuestas a la pregunta(2)

Su respuesta a la pregunta