Что будет выведено на экран?

public class Tst {
    public static class Foo {
        private final Integer x;

        public Foo(Integer x) {
            this.x = x;
        }

        public boolean equals(Foo f) {
            return f.x.equals(this.x);
        }

        public int hashCode() {
            return x.intValue();
        }
    }
    public static void main(String[] args) {
        final Foo f1 = new Foo(1);
        final Foo f2 = new Foo(1);

        final Set<Foo> set = new HashSet<Foo>();
        set.add(f1);
        set.add(f2);

        System.out.println(set.size());
    }
}
Explanation
Тут не сразу заметная ошибка в сигнатуре
public boolean equals(Foo f)
вместо equals(Object o).
В Set для сравнения используется как раз equals(Object o), который в данном случае вернет false.
Одна из причин ввода @Override

Следи за CodeGalaxy

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

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