Что будет выведено на печать после выполнения данного кода?

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
Как известно реализации интерфейса Set не могут содержать в себе одинаковых объектов.
В нашем случае в Set будут помещены 3 объекта. Объекты user1 и user3 НЕ являются одинаковыми, несмотря на то что метод equals() вернет true при сравнении этих объектов. Одного переопределения метода equals() недостаточно.
У равного объекта должен также совпадать hash code. Для этого необходимо переопределять метод hashCode(). Правильный ответ - будет напечатано 3.

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты