What will be printed after execution of this code?

class User {
	private String name;
	
	public User( String name ) {
		this.name = name;
	}

	public boolean equals( Object obj ) {
		User user = (User) obj;
		return user.name.equals( name );
	}

	public String toString() {
		return name;
	}
}

class Foo {
	public static void main(String...arguments) {  //1
		User user1 = new User( "John" ); 
		User user2 = new User( "Bill" ); 
		User user3 = new User( "John" ); 

		Set<User> userSet = new HashSet<User>();
		userSet.add( user1 );
		userSet.add( user2 );
		userSet.add( user3 );  //2

		System.out.println( "Count of users: " + userSet.size() );  //3
	}
}
Explanation
As known, implementation of an interface Set can not contain the same objects.
In our case, 3 objects will be placed in Set. Objects user1 and user3 are not the same, despite the fact that the equals() method returns true while comparing these objects. It is not enough to override only equals() method.
Equal object must have also the same hash code. In order to do this, you must override the hashCode(). The correct answer - 3 will be printed..

Слідкуй за CodeGalaxy

Мобільний додаток Beta

Get it on Google Play
Зворотній Зв’язок
Продовжуйте вивчати
тести з Java
Cosmo
Зареєструйся Зараз
або Підпишись на майбутні тести